diff --git a/packages/agents/sdk/src/config.ts b/packages/agents/sdk/src/config.ts index 0dc9c8a7cf..316e07edcf 100644 --- a/packages/agents/sdk/src/config.ts +++ b/packages/agents/sdk/src/config.ts @@ -198,7 +198,8 @@ export const domainsToChainNames: Record = { "1935897199": "scroll", "1936027759": "sepolia", "1869640549": "optimism-sepolia", - "1633842021": "arbitrum-sepolia" + "1633842021": "arbitrum-sepolia", + "1718772088": "fraxtal", }; // Need to add more domains here. @@ -216,7 +217,8 @@ export const XERC20REGISTRY_DOMAIN_ADDRESS: Record = { "1935897199": "0x397aEEEDd44f40326f9eB583a1DFB8A7A673C40B", // scroll "1936027759": "0x2a3fe9a49fb50536f1ed099192c2ae2404de7bb5", // sepolia "1869640549": "0x18b5b08b10a2e351180f07e31f4fef94d14e28f6", // op-sepolia - "1633842021": "0x343d827d5109e8038bbb71e9ba4f3fd0d546b9ff" // arb-sepolia + "1633842021": "0x343d827d5109e8038bbb71e9ba4f3fd0d546b9ff", // arb-sepolia + "1718772088": "", // fraxtal }; // Need to add more domains here. @@ -234,5 +236,6 @@ export const LOCKBOX_ADAPTER_DOMAIN_ADDRESS: Record = { "1935897199": "", // scroll (TODO) "1936027759": "0xcF021fCFB9bd72E5aA7ab390cFA4fCfDF895c7Cf", // sepolia "1869640549": "0x20b4789065DE09c71848b9A4FcAABB2c10006FA2", // op-sepolia - "1633842021": "0x0f4Fe4903d01E0deb067A7297453fBEFdC36D189" // arb-sepolia + "1633842021": "0x0f4Fe4903d01E0deb067A7297453fBEFdC36D189", // arb-sepolia + "1718772088": "", // fraxtal }; diff --git a/packages/deployments/contracts/contracts/core/connext/facets/BridgeFacet.sol b/packages/deployments/contracts/contracts/core/connext/facets/BridgeFacet.sol index 06d98fec76..6df9ec6a62 100644 --- a/packages/deployments/contracts/contracts/core/connext/facets/BridgeFacet.sol +++ b/packages/deployments/contracts/contracts/core/connext/facets/BridgeFacet.sol @@ -482,7 +482,6 @@ contract BridgeFacet is BaseConnextFacet { * @param _transferId - The unique identifier of the crosschain transaction */ function bumpTransfer(bytes32 _transferId) external payable nonReentrant whenNotPaused { - if (msg.value == 0) revert BridgeFacet__bumpTransfer_valueIsZero(); _bumpTransfer(_transferId, address(0), msg.value); } @@ -720,6 +719,7 @@ contract BridgeFacet is BaseConnextFacet { address relayerVault = s.relayerFeeVault; if (relayerVault == address(0)) revert BridgeFacet__bumpTransfer_noRelayerVault(); if (_relayerFeeAsset == address(0)) { + if (msg.value == 0) revert BridgeFacet__bumpTransfer_valueIsZero(); Address.sendValue(payable(relayerVault), _relayerFee); } else { // Pull funds from user to this contract diff --git a/packages/deployments/contracts/deploy/01_deployMessaging.ts b/packages/deployments/contracts/deploy/01_deployMessaging.ts index bde6c24a98..4af8d5b3a4 100644 --- a/packages/deployments/contracts/deploy/01_deployMessaging.ts +++ b/packages/deployments/contracts/deploy/01_deployMessaging.ts @@ -30,10 +30,8 @@ const formatConnectorArgs = ( watcherManager, } = args; const config = protocol.configs[connectorChainId]; - console.log(`using config`, config); const isHub = deploymentChainId === protocol.hub.chain && connectorChainId != protocol.hub.chain; - const deploymentDomain = chainIdToDomain(deploymentChainId).toString(); const mirrorDomain = chainIdToDomain(mirrorChainId).toString(); @@ -166,13 +164,6 @@ const handleDeployHub = async ( }); console.log(`${connectorName} deployed to ${deployment.address}`); - // setArborist for Spoke to Merkle - const merkleForSpokeContract = await hre.ethers.getContractAt( - "MerkleTreeManager", - merkleTreeManagerForSpoke.address, - deployer, - ); - /// HUBCONNECTOR DEPLOYMENT // Loop through every HubConnector configuration (except for the actual hub's) and deploy. const { configs } = protocol; diff --git a/packages/deployments/contracts/deployConfig/shared.ts b/packages/deployments/contracts/deployConfig/shared.ts index 156de0e4c3..e234b92fa0 100644 --- a/packages/deployments/contracts/deployConfig/shared.ts +++ b/packages/deployments/contracts/deployConfig/shared.ts @@ -46,6 +46,7 @@ const BLOCKS_PER_MINUTE: Record = { 84531: 30, // base-goerli 195: 60, // x1-testnet 534351: 14, // scroll sepolia l2 + 252: 30, // Fraxtal }; const THIRTY_MINUTES_IN_BLOCKS = Object.fromEntries( @@ -770,6 +771,34 @@ export const MESSAGING_PROTOCOL_CONFIGS: Record }, }, }, + 252: { + prefix: "Optimism", + networkName: "Fraxtal", + ambs: { + // L1CrossDomainMessenger + // https://docs.frax.com/fraxtal/addresses/fraxtal-contracts#ethereum-mainnet + hub: "0x126bcc31Bc076B3d515f60FBC81FddE0B0d542Ed", + // L2CrossDomainMessenger + spoke: "0x4200000000000000000000000000000000000007", + }, + processGas: DEFAULT_PROCESS_GAS, + reserveGas: DEFAULT_RESERVE_GAS, + delayBlocks: THIRTY_MINUTES_IN_BLOCKS[252], + disputeBlocks: THIRTY_MINUTES_IN_BLOCKS[252], + minDisputeBlocks: THIRTY_MINUTES_IN_BLOCKS[252], + custom: { + hub: { + // OptimismPortal + // https://docs.frax.com/fraxtal/addresses/fraxtal-contracts#ethereum-mainnet + // https://etherscan.io/address/0x36cb65c1967A0Fb0EEE11569C51C2f2aA1Ca6f6D#code + optimismPortal: "0x36cb65c1967A0Fb0EEE11569C51C2f2aA1Ca6f6D", + gasCap: DEFAULT_PROCESS_GAS, + }, + spoke: { + gasCap: DEFAULT_PROCESS_GAS, + }, + }, + }, }, }, }; diff --git a/packages/deployments/contracts/deployments.json b/packages/deployments/contracts/deployments.json index a02fbc4482..745ec19aea 100644 --- a/packages/deployments/contracts/deployments.json +++ b/packages/deployments/contracts/deployments.json @@ -33458,6 +33458,640 @@ ], "blockNumber": 18982751 }, + "FraxtalHubConnectorStaging": { + "address": "0x44fB86a509B33d65BADA9985B9ce8F52fda621e5", + "abi": [ + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_mirrorDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_amb", + "type": "address" + }, + { + "internalType": "address", + "name": "_rootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_mirrorConnector", + "type": "address" + }, + { + "internalType": "address", + "name": "_optimismPortal", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_gasCap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "Connector__processMessage_notUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FundsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "GasCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageProcessed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "encodedData", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageSent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previous", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "current", + "type": "address" + } + ], + "name": "MirrorConnectorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "mirrorDomain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "amb", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "rootManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "mirrorConnector", + "type": "address" + } + ], + "name": "NewConnector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "AMB", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIRROR_DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OPTIMISM_PORTAL", + "outputs": [ + { + "internalType": "contract IOptimismPortal", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROOT_MANAGER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasCap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mirrorConnector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "processMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Types.WithdrawalTransaction", + "name": "_tx", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_l2OutputIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "version", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "messagePasserStorageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "latestBlockhash", + "type": "bytes32" + } + ], + "internalType": "struct Types.OutputRootProof", + "name": "_outputRootProof", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "_withdrawalProof", + "type": "bytes[]" + } + ], + "name": "processMessageFromRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_encodedData", + "type": "bytes" + } + ], + "name": "sendMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasCap", + "type": "uint256" + } + ], + "name": "setGasCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_mirrorConnector", + "type": "address" + } + ], + "name": "setMirrorConnector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_expected", + "type": "address" + } + ], + "name": "verifySender", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "withdrawFunds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "blockNumber": 19569917 + }, "GnosisHubConnector": { "address": "0xF1c78967584D5E0ffF66dA103b8eb06c82EC020d", "abi": [ @@ -53451,7 +54085,7 @@ "blockNumber": 18737823 }, "RelayerProxyHubStaging": { - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "abi": [ { "inputs": [ @@ -55077,7 +55711,7 @@ "type": "receive" } ], - "blockNumber": 19035338 + "blockNumber": 19566620 }, "RootManager": { "address": "0x523AB7424AD126809b1d7A134eb6E0ee414C9B3A", @@ -326682,7 +327316,7 @@ "blockNumber": 2367423 }, "Connext": { - "address": "0xDB8310cAa57B052ab270A573B512dc5644558f0A", + "address": "0x8f26fd87384b0524aAd9bB7d3be9704303bBC65e", "abi": [ { "inputs": [ @@ -332852,10 +333486,10 @@ "type": "function" } ], - "blockNumber": 12446083 + "blockNumber": 2367585 }, "Connext_DiamondProxy": { - "address": "0xDB8310cAa57B052ab270A573B512dc5644558f0A", + "address": "0x8f26fd87384b0524aAd9bB7d3be9704303bBC65e", "abi": [ { "inputs": [ @@ -339025,7 +339659,7 @@ "type": "function" } ], - "blockNumber": 12446083 + "blockNumber": 2367585 }, "DiamondCutFacet": { "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", @@ -340073,7 +340707,7 @@ "blockNumber": 2367512 }, "MerkleTreeManager": { - "address": "0xD7Ef2975Ffd2d49C21f63A65cB54599D1Ec58023", + "address": "0xC55C4e1aaEd36EecA512Ec71217e98a31d2489A4", "abi": [ { "inputs": [], @@ -340577,10 +341211,10 @@ "type": "function" } ], - "blockNumber": 12448917 + "blockNumber": 2367381 }, "MerkleTreeManagerUpgradeBeacon": { - "address": "0x0475f5940cA5905d838Bf867Cd8cA7B3F4864196", + "address": "0x2D8fA9999bdFa4A5C83B3d6C4AedE72FCa7A5e8a", "abi": [ { "inputs": [ @@ -340616,10 +341250,10 @@ "type": "fallback" } ], - "blockNumber": 12448920 + "blockNumber": 2367394 }, "MerkleTreeManagerUpgradeBeaconProxy": { - "address": "0x2bD1b90cc180444e8868f131EeD3eaBf8A825d36", + "address": "0xD59F8ab5Cc1cA431f15f236C99e29ab71d37dE24", "abi": [ { "inputs": [ @@ -340646,7 +341280,7 @@ "type": "receive" } ], - "blockNumber": 12448921 + "blockNumber": 2367405 }, "MultiSend": { "address": "0xd5D26C5c4e34c701339494817533db59E159e077", @@ -341798,7 +342432,7 @@ "blockNumber": 2367439 }, "RelayerProxy": { - "address": "0x9FE608C758d3fad32d8869ec8C11DbfF53c777f1", + "address": "0xD2236499Ed49B9395bf4e4aC46c89718AC2D46F5", "abi": [ { "inputs": [ @@ -342562,49 +343196,25149 @@ { "inputs": [ { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, + "components": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32[32]", + "name": "path", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "internalType": "struct ISpokeConnector.Proof[]", + "name": "_proofs", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "_aggregateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32[32]", + "name": "_aggregatePath", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "_aggregateIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_fee", + "type": "uint256" + } + ], + "name": "proveAndProcess", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "removeRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_encodedData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_messageFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "send", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_connext", + "type": "address" + } + ], + "name": "setConnext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_feeCollector", + "type": "address" + } + ], + "name": "setFeeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_finalizeCooldown", + "type": "uint256" + } + ], + "name": "setFinalizeCooldown", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_gelatoRelayer", + "type": "address" + } + ], + "name": "setGelatoRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_keep3r", + "type": "address" + } + ], + "name": "setKeep3r", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_proposeCooldown", + "type": "uint256" + } + ], + "name": "setProposeAggregateRootCooldown", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spokeConnector", + "type": "address" + } + ], + "name": "setSpokeConnector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "spokeConnector", + "outputs": [ + { + "internalType": "contract ISpokeConnector", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "blockNumber": 2367602 + }, + "RoutersFacet": { + "address": "0x97477e71B0dacd9581bf43bEcC1DB95d6b0A998E", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__initializeRouter_configNotEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_notNewOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterOwner_noChange", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterRecipient_notNewRecipient", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouterForPortal_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_routerEmpty", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "liquidityFeeNumerator", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityFeeNumeratorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxRoutersPerTransfer", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MaxRoutersPerTransferUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterApprovedForPortal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "RouterInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "RouterOwnerAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevProposed", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newProposed", + "type": "address" + } + ], + "name": "RouterOwnerProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevRecipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newRecipient", + "type": "address" + } + ], + "name": "RouterRecipientSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterUnapprovedForPortal", + "type": "event" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_NUMERATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "acceptProposedRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "name": "addRouterLiquidity", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "addRouterLiquidityFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwnerTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApprovalForPortal", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "initializeRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxRoutersPerTransfer", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_proposed", + "type": "address" + } + ], + "name": "proposeRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + } + ], + "name": "removeRouterLiquidity", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "removeRouterLiquidityFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "routerBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_numerator", + "type": "uint256" + } + ], + "name": "setLiquidityFeeNumerator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newMaxRouters", + "type": "uint256" + } + ], + "name": "setMaxRoutersPerTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "setRouterRecipient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367446 + }, + "StableSwapFacet": { + "address": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenIndex_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapToken_outOfRange", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "AddLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "NewSwapFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidityImbalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "boughtId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + } + ], + "name": "RemoveLiquidityOne", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensSold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "soldId", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "boughtId", + "type": "uint128" + } + ], + "name": "TokenSwap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addSwapLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateRemoveSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + } + ], + "name": "calculateRemoveSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "availableTokenAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + } + ], + "name": "calculateSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "deposit", + "type": "bool" + } + ], + "name": "calculateSwapTokenAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapA", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapAPrecise", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSwapAdminBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapLPToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapStorage", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "internalType": "struct SwapUtils.Swap", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } + ], + "name": "getSwapTokenIndex", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapVirtualPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "maxBurnAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityImbalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "minAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minDy", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExact", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367462 + }, + "SwapAdminFacet": { + "address": "0x273c33499f774D2C2466ef95352A7016474C43ee", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_alreadyDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_aExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_duplicateTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_feeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notDisabledPool", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LPTokenTargetUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SwapUtils.Swap", + "name": "swap", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "disableSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "_pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "string", + "name": "lpTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "lpTokenSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_adminFee", + "type": "uint256" + } + ], + "name": "initializeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lpTokenTargetAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + } + ], + "name": "rampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "removeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "setSwapAdminFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "setSwapFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "stopRampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "updateLpTokenTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "withdrawSwapAdminFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367483 + }, + "TestAdopted": { + "address": "0x97C121E5783aDf136162C86286e19e4343131f2F", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_newName", + "type": "string" + }, + { + "internalType": "string", + "name": "_newSymbol", + "type": "string" + } + ], + "name": "setDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367589 + }, + "TestERC20": { + "address": "0x471F702E7D96E541488140042bCD1206Ae55CCa5", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_newName", + "type": "string" + }, + { + "internalType": "string", + "name": "_newSymbol", + "type": "string" + } + ], + "name": "setDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367586 + }, + "TestWETH": { + "address": "0xB8E4281877946dED2945aF4d3b77900182004C93", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_newName", + "type": "string" + }, + { + "internalType": "string", + "name": "_newSymbol", + "type": "string" + } + ], + "name": "setDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367592 + }, + "TokenFacet": { + "address": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badBurn", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badMint", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_invalidParams", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_remainsCustodied", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_representationListed", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_localNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_onlyRemote", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "adoptedAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "localAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cap", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "swapPool", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "StableSwapAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "representation", + "type": "address" + } + ], + "name": "TokenDeployed", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "addStableSwapPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_adopted", + "type": "address" + } + ], + "name": "adoptedToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "getCustodiedAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "getLocalAndAdoptedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_candidate", + "type": "address" + } + ], + "name": "getTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "representationToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "_canonicalDecimals", + "type": "uint8" + }, + { + "internalType": "string", + "name": "_representationName", + "type": "string" + }, + { + "internalType": "string", + "name": "_representationSymbol", + "type": "string" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_cap", + "type": "uint256" + } + ], + "name": "setupAsset", + "outputs": [ + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "setupAssetWithDeployedRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "updateDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "updateLiquidityCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367415 + }, + "UpgradeBeaconController": { + "address": "0x369a0fd9Fe80aFD7Af48F6241a8Bf433e1899e7F", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367377 + }, + "WatcherManager": { + "address": "0x9d07e074e80671A1a39C45c789147765c7E99fa7", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "WatcherAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "WatcherRemoved", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "addWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isWatcher", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "removeWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "blockNumber": 2367376 + }, + "X1SpokeConnector": { + "address": "0x4fA03719D17B5683A7410f723074d3c989326Ac5", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "mirrorDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "amb", + "type": "address" + }, + { + "internalType": "address", + "name": "rootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "mirrorConnector", + "type": "address" + }, + { + "internalType": "uint256", + "name": "processGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delayBlocks", + "type": "uint256" + }, + { + "internalType": "address", + "name": "merkle", + "type": "address" + }, + { + "internalType": "address", + "name": "watcherManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minDisputeBlocks", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "disputeBlocks", + "type": "uint256" + } + ], + "internalType": "struct SpokeConnector.ConstructorParams", + "name": "_baseSpokeParams", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "Connector__processMessage_notUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "RateLimited__rateLimited_messageSendRateExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_activateOptimisticMode__OptimisticModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_constructor__DisputeBlocksLowerThanMin", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__InvalidInputHash", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__ProposeInProgress", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__ProposedHashIsFinalizedHash", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_onlyOptimisticMode__SlowModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_onlyProposer__NotAllowlistedProposer", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_proposeAggregateRoot__ProposeInProgress", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_receiveAggregateRoot__OptimisticModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_identityOOG", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_invalidPointer", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_nullPointer", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "rootTimestamp", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "endOfDispute", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + } + ], + "name": "AggregateRootProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootReceived", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootVerified", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "DelayBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "Dispatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + } + ], + "name": "DisputeBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FundsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageProcessed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "aggregateIndex", + "type": "uint256" + } + ], + "name": "MessageProven", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "encodedData", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageSent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + } + ], + "name": "MinDisputeBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previous", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "current", + "type": "address" + } + ], + "name": "MirrorConnectorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "mirrorDomain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "amb", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "rootManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "mirrorConnector", + "type": "address" + } + ], + "name": "NewConnector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "OptimisticModeActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + } + ], + "name": "PendingAggregateRootDeleted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "Process", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + } + ], + "name": "ProposedRootFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposer", + "type": "address" + } + ], + "name": "ProposerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposer", + "type": "address" + } + ], + "name": "ProposerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updater", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRateLimit", + "type": "uint256" + } + ], + "name": "SendRateLimitUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "SlowModeActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "snapshotId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "SnapshotRootSaved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcherManager", + "type": "address" + } + ], + "name": "WatcherManagerChanged", + "type": "event" + }, + { + "inputs": [], + "name": "AMB", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FINALIZED_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MERKLE", + "outputs": [ + { + "internalType": "contract MerkleTreeManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIRROR_DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROCESS_GAS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RESERVE_GAS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROOT_MANAGER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "activateOptimisticMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "activateSlowMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_proposer", + "type": "address" + } + ], + "name": "addProposer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "addSender", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowlistedProposers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowlistedSenders", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delayBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_recipientAddress", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_messageBody", + "type": "bytes" + } + ], + "name": "dispatch", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disputeBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_proposedAggregateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_rootTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_endOfDispute", + "type": "uint256" + } + ], + "name": "finalize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getLastCompletedSnapshotId", + "outputs": [ + { + "internalType": "uint256", + "name": "_lastCompletedSnapshotId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSnapshotDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "_snapshotDuration", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "home", + "outputs": [ + { + "internalType": "contract IOutbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_potentialReplica", + "type": "address" + } + ], + "name": "isReplica", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastSentBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "localDomain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minDisputeBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mirrorConnector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "optimisticMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "outboundRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pendingAggregateRoots", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "processMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_aggregateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_rootTimestamp", + "type": "uint256" + } + ], + "name": "proposeAggregateRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedAggregateRootHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32[32]", + "name": "path", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "internalType": "struct SpokeConnector.Proof[]", + "name": "_proofs", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "_aggregateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32[32]", + "name": "_aggregatePath", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "_aggregateIndex", + "type": "uint256" + } + ], + "name": "proveAndProcess", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "provenAggregateRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "provenMessageRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rateLimitBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "receiveHubAggregateRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_fraudulentRoot", + "type": "bytes32" + } + ], + "name": "removePendingAggregateRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_proposer", + "type": "address" + } + ], + "name": "removeProposer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "removeSender", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_encodedData", + "type": "bytes" + } + ], + "name": "send", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "sentMessageRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_delayBlocks", + "type": "uint256" + } + ], + "name": "setDelayBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_disputeBlocks", + "type": "uint256" + } + ], + "name": "setDisputeBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minDisputeBlocks", + "type": "uint256" + } + ], + "name": "setMinDisputeBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_mirrorConnector", + "type": "address" + } + ], + "name": "setMirrorConnector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rateLimit", + "type": "uint256" + } + ], + "name": "setRateLimitBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcherManager", + "type": "address" + } + ], + "name": "setWatcherManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "snapshotRoots", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_expected", + "type": "address" + } + ], + "name": "verifySender", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "watcherManager", + "outputs": [ + { + "internalType": "contract WatcherManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "withdrawFunds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "blockNumber": 2367408 + }, + "_DefaultDiamondERC165Init": { + "address": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "interfaceIds", + "type": "bytes4[]" + }, + { + "internalType": "bytes4[]", + "name": "interfaceIdsToRemove", + "type": "bytes4[]" + } + ], + "name": "setERC165", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2367573 + }, + "_DefaultDiamondLoupeFacet": { + "address": "0x3Bcf4185443A339517aD4e580067f178d1B68E1D", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "facetFunctionSelectors_", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "blockNumber": 2367572 + } + } + } + ], + "252": [ + { + "name": "fraxtal", + "chainId": "252", + "contracts": { + "BridgeFacetStaging": { + "address": "0x912541Ad966244F278c997E34F80A33AFF9B2857", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_invalidSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_noRelayerVault", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_valueIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__excecute_insufficientGas", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_badFastLiquidityStatus", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_externalCallFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidRouterSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidSequencerSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_maxRoutersExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notApprovedForPortals", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_unapprovedSender", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_wrongDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceReceiveLocal_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__onlyDelegate_notDelegate", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__removeSequencer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_emptyTo", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet_xcall__emptyLocalAsset", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "AavePortalMintUnbacked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct ExecuteArgs", + "name": "args", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "ExternalCalldataExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + } + ], + "name": "ForceReceiveLocal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "remote", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RemoteAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "SlippageUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "increase", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "TransferRelayerFeesIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "XAppConnectionManagerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "indexed": false, + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "XCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "addSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "approvedSequencers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_relayerFeeAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_router", + "type": "bytes32" + } + ], + "name": "enrollRemoteRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "internalType": "struct ExecuteArgs", + "name": "_args", + "type": "tuple" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + } + ], + "name": "forceReceiveLocal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + } + ], + "name": "forceUpdateSlippage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "remote", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "removeSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "routedTransfers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + } + ], + "name": "setXAppConnectionManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "transferStatus", + "outputs": [ + { + "internalType": "enum DestinationTransferStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "xAppConnectionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "blockNumber": 2894784 + }, + "ConnextStaging": { + "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "initContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ], + "internalType": "struct ConnextDiamond.Initialization[]", + "name": "_initializations", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ConnextDiamond__fallback_facetNotExit", + "type": "error" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badBurn", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badMint", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_invalidParams", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_remainsCustodied", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_representationListed", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_localNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_onlyRemote", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "adoptedAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "localAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cap", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "swapPool", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "StableSwapAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "representation", + "type": "address" + } + ], + "name": "TokenDeployed", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "addStableSwapPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_adopted", + "type": "address" + } + ], + "name": "adoptedToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "getCustodiedAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "getLocalAndAdoptedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_candidate", + "type": "address" + } + ], + "name": "getTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "representationToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "_canonicalDecimals", + "type": "uint8" + }, + { + "internalType": "string", + "name": "_representationName", + "type": "string" + }, + { + "internalType": "string", + "name": "_representationSymbol", + "type": "string" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_cap", + "type": "uint256" + } + ], + "name": "setupAsset", + "outputs": [ + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "setupAssetWithDeployedRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "updateDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "updateLiquidityCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_invalidSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_noRelayerVault", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_valueIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__excecute_insufficientGas", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_badFastLiquidityStatus", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_externalCallFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidRouterSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidSequencerSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_maxRoutersExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notApprovedForPortals", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_unapprovedSender", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_wrongDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceReceiveLocal_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__onlyDelegate_notDelegate", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__removeSequencer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_emptyTo", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet_xcall__emptyLocalAsset", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "AavePortalMintUnbacked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct ExecuteArgs", + "name": "args", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "ExternalCalldataExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + } + ], + "name": "ForceReceiveLocal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "remote", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RemoteAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "SlippageUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "increase", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "TransferRelayerFeesIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "XAppConnectionManagerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "indexed": false, + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "XCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "addSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "approvedSequencers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_relayerFeeAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_router", + "type": "bytes32" + } + ], + "name": "enrollRemoteRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "internalType": "struct ExecuteArgs", + "name": "_args", + "type": "tuple" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + } + ], + "name": "forceReceiveLocal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + } + ], + "name": "forceUpdateSlippage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "remote", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "removeSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "routedTransfers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + } + ], + "name": "setXAppConnectionManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "transferStatus", + "outputs": [ + { + "internalType": "enum DestinationTransferStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "xAppConnectionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "InboxFacet__handle_notTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyRemoteRouter_notRemote", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyReplica_notReplica", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_alreadyReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_noPortalRouter", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "actual", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "TypedMemView__assertType_typeAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__assertValid_validityAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "originAndNonce", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Receive", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Reconciled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_origin", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_nonce", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + } + ], + "name": "handle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__revokeRole_invalidInput", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "AssignRoleAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "AssignRoleRouter", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "AssignRoleWatcher", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "revokedAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum Role", + "name": "revokedRole", + "type": "uint8" + } + ], + "name": "RevokeRole", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "RouterAllowlistRemovalProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "renounced", + "type": "bool" + } + ], + "name": "RouterAllowlistRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "name": "assignRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "assignRoleRouterAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "assignRoleWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposeRouterAllowlistRemoval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_role", + "type": "address" + } + ], + "name": "queryRole", + "outputs": [ + { + "internalType": "enum Role", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeRouterAllowlist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_revoke", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistRemoved", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_invalidAsset", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_zeroAmount", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_assetNotApproved", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__setAavePortalFee_invalidFee", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePoolUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalRepayment", + "type": "event" + }, + { + "inputs": [], + "name": "aavePool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "aavePortalFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalFeeDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxIn", + "type": "uint256" + } + ], + "name": "repayAavePortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_portalAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + } + ], + "name": "repayAavePortalFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_aavePool", + "type": "address" + } + ], + "name": "setAavePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_aavePortalFeeNumerator", + "type": "uint256" + } + ], + "name": "setAavePortalFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "RelayerFacet__addRelayer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__removeRelayer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerFeeVaultUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "addRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "approvedRelayers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "relayerFeeVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "removeRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayerFeeVault", + "type": "address" + } + ], + "name": "setRelayerFeeVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__initializeRouter_configNotEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_notNewOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterOwner_noChange", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterRecipient_notNewRecipient", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouterForPortal_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_routerEmpty", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "liquidityFeeNumerator", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityFeeNumeratorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxRoutersPerTransfer", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MaxRoutersPerTransferUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterApprovedForPortal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "RouterInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "RouterOwnerAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevProposed", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newProposed", + "type": "address" + } + ], + "name": "RouterOwnerProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevRecipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newRecipient", + "type": "address" + } + ], + "name": "RouterRecipientSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterUnapprovedForPortal", + "type": "event" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_NUMERATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "acceptProposedRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "name": "addRouterLiquidity", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "addRouterLiquidityFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwnerTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApprovalForPortal", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "initializeRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxRoutersPerTransfer", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_proposed", + "type": "address" + } + ], + "name": "proposeRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + } + ], + "name": "removeRouterLiquidity", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "removeRouterLiquidityFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "routerBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_numerator", + "type": "uint256" + } + ], + "name": "setLiquidityFeeNumerator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newMaxRouters", + "type": "uint256" + } + ], + "name": "setMaxRoutersPerTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "setRouterRecipient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenIndex_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapToken_outOfRange", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "AddLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "NewSwapFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidityImbalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "boughtId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + } + ], + "name": "RemoveLiquidityOne", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensSold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "soldId", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "boughtId", + "type": "uint128" + } + ], + "name": "TokenSwap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addSwapLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateRemoveSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + } + ], + "name": "calculateRemoveSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "availableTokenAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + } + ], + "name": "calculateSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "deposit", + "type": "bool" + } + ], + "name": "calculateSwapTokenAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapA", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapAPrecise", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSwapAdminBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapLPToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapStorage", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "internalType": "struct SwapUtils.Swap", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } + ], + "name": "getSwapTokenIndex", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapVirtualPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "maxBurnAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityImbalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "minAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minDy", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExact", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_alreadyDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_aExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_duplicateTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_feeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notDisabledPool", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LPTokenTargetUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SwapUtils.Swap", + "name": "swap", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "disableSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "_pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "string", + "name": "lpTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "lpTokenSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_adminFee", + "type": "uint256" + } + ], + "name": "initializeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lpTokenTargetAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + } + ], + "name": "rampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "removeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "setSwapAdminFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "setSwapFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "stopRampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "updateLpTokenTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "withdrawSwapAdminFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "DiamondCutProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCutRescinded", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "getAcceptanceTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "proposeDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "rescindDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "DiamondInit__init_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "DiamondInit__init_domainsDontMatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_acceptanceDelay", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_lpTokenTargetAddress", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "facetFunctionSelectors_", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "blockNumber": 2894868 + }, + "ConnextStaging_DiamondProxy": { + "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "initContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ], + "internalType": "struct ConnextDiamond.Initialization[]", + "name": "_initializations", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ConnextDiamond__fallback_facetNotExit", + "type": "error" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badBurn", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badMint", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_invalidParams", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_remainsCustodied", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_representationListed", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_localNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_onlyRemote", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "adoptedAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "localAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cap", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "swapPool", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "StableSwapAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "representation", + "type": "address" + } + ], + "name": "TokenDeployed", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "addStableSwapPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_adopted", + "type": "address" + } + ], + "name": "adoptedToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "getCustodiedAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "getLocalAndAdoptedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_candidate", + "type": "address" + } + ], + "name": "getTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "representationToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "_canonicalDecimals", + "type": "uint8" + }, + { + "internalType": "string", + "name": "_representationName", + "type": "string" + }, + { + "internalType": "string", + "name": "_representationSymbol", + "type": "string" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_cap", + "type": "uint256" + } + ], + "name": "setupAsset", + "outputs": [ + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "setupAssetWithDeployedRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "updateDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "updateLiquidityCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_invalidSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_noRelayerVault", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_valueIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__excecute_insufficientGas", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_badFastLiquidityStatus", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_externalCallFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidRouterSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidSequencerSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_maxRoutersExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notApprovedForPortals", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_unapprovedSender", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_wrongDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceReceiveLocal_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__onlyDelegate_notDelegate", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__removeSequencer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_emptyTo", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet_xcall__emptyLocalAsset", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "AavePortalMintUnbacked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct ExecuteArgs", + "name": "args", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "ExternalCalldataExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + } + ], + "name": "ForceReceiveLocal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "remote", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RemoteAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "SlippageUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "increase", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "TransferRelayerFeesIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "XAppConnectionManagerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "indexed": false, + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "XCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "addSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "approvedSequencers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_relayerFeeAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_router", + "type": "bytes32" + } + ], + "name": "enrollRemoteRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "internalType": "struct ExecuteArgs", + "name": "_args", + "type": "tuple" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + } + ], + "name": "forceReceiveLocal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + } + ], + "name": "forceUpdateSlippage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "remote", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "removeSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "routedTransfers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + } + ], + "name": "setXAppConnectionManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "transferStatus", + "outputs": [ + { + "internalType": "enum DestinationTransferStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "xAppConnectionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "InboxFacet__handle_notTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyRemoteRouter_notRemote", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyReplica_notReplica", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_alreadyReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_noPortalRouter", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "actual", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "TypedMemView__assertType_typeAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__assertValid_validityAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "originAndNonce", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Receive", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Reconciled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_origin", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_nonce", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + } + ], + "name": "handle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__revokeRole_invalidInput", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "AssignRoleAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "AssignRoleRouter", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "AssignRoleWatcher", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "revokedAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum Role", + "name": "revokedRole", + "type": "uint8" + } + ], + "name": "RevokeRole", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "RouterAllowlistRemovalProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "renounced", + "type": "bool" + } + ], + "name": "RouterAllowlistRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "name": "assignRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "assignRoleRouterAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "assignRoleWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposeRouterAllowlistRemoval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_role", + "type": "address" + } + ], + "name": "queryRole", + "outputs": [ + { + "internalType": "enum Role", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeRouterAllowlist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_revoke", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistRemoved", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_invalidAsset", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_zeroAmount", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_assetNotApproved", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__setAavePortalFee_invalidFee", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePoolUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalRepayment", + "type": "event" + }, + { + "inputs": [], + "name": "aavePool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "aavePortalFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalFeeDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxIn", + "type": "uint256" + } + ], + "name": "repayAavePortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_portalAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + } + ], + "name": "repayAavePortalFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_aavePool", + "type": "address" + } + ], + "name": "setAavePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_aavePortalFeeNumerator", + "type": "uint256" + } + ], + "name": "setAavePortalFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "RelayerFacet__addRelayer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__removeRelayer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerFeeVaultUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "addRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "approvedRelayers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "relayerFeeVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "removeRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayerFeeVault", + "type": "address" + } + ], + "name": "setRelayerFeeVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__initializeRouter_configNotEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_notNewOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterOwner_noChange", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterRecipient_notNewRecipient", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouterForPortal_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_routerEmpty", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "liquidityFeeNumerator", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityFeeNumeratorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxRoutersPerTransfer", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MaxRoutersPerTransferUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterApprovedForPortal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "RouterInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "RouterOwnerAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevProposed", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newProposed", + "type": "address" + } + ], + "name": "RouterOwnerProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevRecipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newRecipient", + "type": "address" + } + ], + "name": "RouterRecipientSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterUnapprovedForPortal", + "type": "event" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_NUMERATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "acceptProposedRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "name": "addRouterLiquidity", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "addRouterLiquidityFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwnerTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApprovalForPortal", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "initializeRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxRoutersPerTransfer", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_proposed", + "type": "address" + } + ], + "name": "proposeRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + } + ], + "name": "removeRouterLiquidity", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "removeRouterLiquidityFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "routerBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_numerator", + "type": "uint256" + } + ], + "name": "setLiquidityFeeNumerator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newMaxRouters", + "type": "uint256" + } + ], + "name": "setMaxRoutersPerTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "setRouterRecipient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenIndex_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapToken_outOfRange", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "AddLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "NewSwapFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidityImbalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "boughtId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + } + ], + "name": "RemoveLiquidityOne", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensSold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "soldId", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "boughtId", + "type": "uint128" + } + ], + "name": "TokenSwap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addSwapLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateRemoveSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + } + ], + "name": "calculateRemoveSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "availableTokenAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + } + ], + "name": "calculateSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "deposit", + "type": "bool" + } + ], + "name": "calculateSwapTokenAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapA", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapAPrecise", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSwapAdminBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapLPToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapStorage", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "internalType": "struct SwapUtils.Swap", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } + ], + "name": "getSwapTokenIndex", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapVirtualPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "maxBurnAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityImbalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "minAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minDy", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExact", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_alreadyDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_aExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_duplicateTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_feeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notDisabledPool", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LPTokenTargetUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SwapUtils.Swap", + "name": "swap", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "disableSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "_pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "string", + "name": "lpTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "lpTokenSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_adminFee", + "type": "uint256" + } + ], + "name": "initializeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lpTokenTargetAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + } + ], + "name": "rampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "removeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "setSwapAdminFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "setSwapFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "stopRampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "updateLpTokenTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "withdrawSwapAdminFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "DiamondCutProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCutRescinded", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "getAcceptanceTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "proposeDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "rescindDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "DiamondInit__init_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "DiamondInit__init_domainsDontMatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_acceptanceDelay", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_lpTokenTargetAddress", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "facetFunctionSelectors_", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "blockNumber": 2894868 + }, + "DiamondCutFacetStaging": { + "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "DiamondCutProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCutRescinded", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "getAcceptanceTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "proposeDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "rescindDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2894828 + }, + "DiamondInitStaging": { + "address": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", + "abi": [ + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "DiamondInit__init_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "DiamondInit__init_domainsDontMatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_acceptanceDelay", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_lpTokenTargetAddress", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2894834 + }, + "FraxtalSpokeConnectorStaging": { + "address": "0x9963a1E4fD60ba4a89E92930c8D8686514705BB6", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "mirrorDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "amb", + "type": "address" + }, + { + "internalType": "address", + "name": "rootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "mirrorConnector", + "type": "address" + }, + { + "internalType": "uint256", + "name": "processGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delayBlocks", + "type": "uint256" + }, + { + "internalType": "address", + "name": "merkle", + "type": "address" + }, + { + "internalType": "address", + "name": "watcherManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minDisputeBlocks", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "disputeBlocks", + "type": "uint256" + } + ], + "internalType": "struct SpokeConnector.ConstructorParams", + "name": "_baseSpokeParams", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_gasCap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "Connector__processMessage_notUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "RateLimited__rateLimited_messageSendRateExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_activateOptimisticMode__OptimisticModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_constructor__DisputeBlocksLowerThanMin", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__InvalidInputHash", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__ProposeInProgress", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__ProposedHashIsFinalizedHash", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_onlyOptimisticMode__SlowModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_onlyProposer__NotAllowlistedProposer", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_proposeAggregateRoot__ProposeInProgress", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_receiveAggregateRoot__OptimisticModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_identityOOG", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_invalidPointer", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_nullPointer", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "rootTimestamp", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "endOfDispute", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + } + ], + "name": "AggregateRootProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootReceived", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootVerified", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "DelayBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "Dispatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + } + ], + "name": "DisputeBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FundsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "GasCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageProcessed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "aggregateIndex", + "type": "uint256" + } + ], + "name": "MessageProven", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "encodedData", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageSent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + } + ], + "name": "MinDisputeBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previous", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "current", + "type": "address" + } + ], + "name": "MirrorConnectorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "mirrorDomain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "amb", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "rootManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "mirrorConnector", + "type": "address" + } + ], + "name": "NewConnector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "OptimisticModeActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + } + ], + "name": "PendingAggregateRootDeleted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "Process", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + } + ], + "name": "ProposedRootFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposer", + "type": "address" + } + ], + "name": "ProposerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposer", + "type": "address" + } + ], + "name": "ProposerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updater", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRateLimit", + "type": "uint256" + } + ], + "name": "SendRateLimitUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "SlowModeActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "snapshotId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "SnapshotRootSaved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcherManager", + "type": "address" + } + ], + "name": "WatcherManagerChanged", + "type": "event" + }, + { + "inputs": [], + "name": "AMB", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FINALIZED_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MERKLE", + "outputs": [ + { + "internalType": "contract MerkleTreeManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIRROR_DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROCESS_GAS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RESERVE_GAS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROOT_MANAGER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "activateOptimisticMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "activateSlowMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_proposer", + "type": "address" + } + ], + "name": "addProposer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "addSender", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowlistedProposers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowlistedSenders", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delayBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_recipientAddress", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_messageBody", + "type": "bytes" + } + ], + "name": "dispatch", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disputeBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_proposedAggregateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_rootTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_endOfDispute", + "type": "uint256" + } + ], + "name": "finalize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gasCap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastCompletedSnapshotId", + "outputs": [ + { + "internalType": "uint256", + "name": "_lastCompletedSnapshotId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSnapshotDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "_snapshotDuration", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "home", + "outputs": [ + { + "internalType": "contract IOutbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_potentialReplica", + "type": "address" + } + ], + "name": "isReplica", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastSentBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "localDomain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minDisputeBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mirrorConnector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "optimisticMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "outboundRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pendingAggregateRoots", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "processMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_aggregateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_rootTimestamp", + "type": "uint256" + } + ], + "name": "proposeAggregateRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedAggregateRootHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32[32]", + "name": "path", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "internalType": "struct SpokeConnector.Proof[]", + "name": "_proofs", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "_aggregateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32[32]", + "name": "_aggregatePath", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "_aggregateIndex", + "type": "uint256" + } + ], + "name": "proveAndProcess", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "provenAggregateRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "provenMessageRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rateLimitBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_fraudulentRoot", + "type": "bytes32" + } + ], + "name": "removePendingAggregateRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_proposer", + "type": "address" + } + ], + "name": "removeProposer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "removeSender", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_encodedData", + "type": "bytes" + } + ], + "name": "send", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "sentMessageRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_delayBlocks", + "type": "uint256" + } + ], + "name": "setDelayBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_disputeBlocks", + "type": "uint256" + } + ], + "name": "setDisputeBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasCap", + "type": "uint256" + } + ], + "name": "setGasCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minDisputeBlocks", + "type": "uint256" + } + ], + "name": "setMinDisputeBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_mirrorConnector", + "type": "address" + } + ], + "name": "setMirrorConnector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rateLimit", + "type": "uint256" + } + ], + "name": "setRateLimitBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcherManager", + "type": "address" + } + ], + "name": "setWatcherManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "snapshotRoots", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_expected", + "type": "address" + } + ], + "name": "verifySender", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "watcherManager", + "outputs": [ + { + "internalType": "contract WatcherManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "withdrawFunds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "blockNumber": 2889776 + }, + "InboxFacetStaging": { + "address": "0x5efE4a498a9b4Ea0DC86e1772A17Dc62Ab4105AD", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__handle_notTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyRemoteRouter_notRemote", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyReplica_notReplica", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_alreadyReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_noPortalRouter", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "actual", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "TypedMemView__assertType_typeAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__assertValid_validityAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "originAndNonce", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Receive", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Reconciled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_origin", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_nonce", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + } + ], + "name": "handle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2894790 + }, + "LPToken": { + "address": "0x0296da2Ce82eb3B98eB05925bC5777C7dA0d0F09", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "initialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2894840 + }, + "MerkleTreeManagerStaging": { + "address": "0xbA7A99409aC88E15A1945A8A8a047Fe51BBf9D95", + "abi": [ + { + "inputs": [], + "name": "MerkleLib__insert_treeIsFull", + "type": "error" + }, + { + "inputs": [], + "name": "MerkleTreeManager__renounceOwnership_prohibited", + "type": "error" + }, + { + "inputs": [], + "name": "MerkleTreeManager__setArborist_alreadyArborist", + "type": "error" + }, + { + "inputs": [], + "name": "MerkleTreeManager__setArborist_zeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previous", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + } + ], + "name": "ArboristUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "count", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "LeafInserted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "count", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "LeavesInserted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "arborist", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "branch", + "outputs": [ + { + "internalType": "bytes32[32]", + "name": "", + "type": "bytes32[32]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "count", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "incrementNonce", + "outputs": [ + { + "internalType": "uint32", + "name": "_nonce", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_arborist", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "insert", + "outputs": [ + { + "internalType": "bytes32", + "name": "_root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_count", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_leaves", + "type": "bytes32[]" + } + ], + "name": "insert", + "outputs": [ + { + "internalType": "bytes32", + "name": "_root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_count", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "leaves", + "outputs": [ + { + "internalType": "enum MerkleTreeManager.LeafStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_leaf", + "type": "bytes32" + } + ], + "name": "markAsProcessed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_leaf", + "type": "bytes32" + } + ], + "name": "markAsProven", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "root", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rootAndCount", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newArborist", + "type": "address" + } + ], + "name": "setArborist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tree", + "outputs": [ + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "blockNumber": 2889678 + }, + "MerkleTreeManagerUpgradeBeaconProxyStaging": { + "address": "0x955D1693C64e5a0746130FF6F6653E2171cC6708", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_upgradeBeacon", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_initializationCalldata", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "blockNumber": 2889685 + }, + "MerkleTreeManagerUpgradeBeaconStaging": { + "address": "0xB20c7f8aDe683C1ad7F5b76435D9345059b1ed3F", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_initialImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgrade", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "blockNumber": 2889682 + }, + "MultiSend": { + "address": "0x43Add7f520Cc35e5DbF04f5426a03EA8Ca052c98", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + } + ], + "name": "multiSend", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "blockNumber": 2895047 + }, + "PortalFacetStaging": { + "address": "0x04B83cdACB4D6548aC583AFdEF6677128A789428", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_invalidAsset", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_zeroAmount", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_assetNotApproved", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__setAavePortalFee_invalidFee", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePoolUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalRepayment", + "type": "event" + }, + { + "inputs": [], + "name": "aavePool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "aavePortalFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalFeeDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxIn", + "type": "uint256" + } + ], + "name": "repayAavePortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_portalAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + } + ], + "name": "repayAavePortalFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_aavePool", + "type": "address" + } + ], + "name": "setAavePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_aavePortalFeeNumerator", + "type": "uint256" + } + ], + "name": "setAavePortalFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "blockNumber": 2894800 + }, + "ProposedOwnableFacetStaging": { + "address": "0xF28Eeca075D63886C6152672b926CF89d9782780", + "abi": [ + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__revokeRole_invalidInput", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "AssignRoleAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "AssignRoleRouter", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "AssignRoleWatcher", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "revokedAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum Role", + "name": "revokedRole", + "type": "uint8" + } + ], + "name": "RevokeRole", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "RouterAllowlistRemovalProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "renounced", + "type": "bool" + } + ], + "name": "RouterAllowlistRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "name": "assignRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "assignRoleRouterAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "assignRoleWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposeRouterAllowlistRemoval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_role", + "type": "address" + } + ], + "name": "queryRole", + "outputs": [ { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" + "internalType": "enum Role", + "name": "", + "type": "uint8" } ], - "name": "proveAndProcess", + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeRouterAllowlist", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -342613,25 +368347,18 @@ "inputs": [ { "internalType": "address", - "name": "_relayer", + "name": "_revoke", "type": "address" } ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", + "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], - "name": "renounced", + "name": "routerAllowlistRemoved", "outputs": [ { "internalType": "bool", @@ -342643,76 +368370,168 @@ "type": "function" }, { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, + "inputs": [], + "name": "routerAllowlistTimestamp", + "outputs": [ { "internalType": "uint256", - "name": "_relayerFee", + "name": "", "type": "uint256" } ], - "name": "send", + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" + } + ], + "blockNumber": 2894795 + }, + "RelayerFacetStaging": { + "address": "0x5cC220030AFf5a2068A62FEaC09553f0B6604f60", + "abi": [ + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__addRelayer_alreadyApproved", + "type": "error" }, { + "inputs": [], + "name": "RelayerFacet__removeRelayer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", + "type": "error" + }, + { + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "address", - "name": "_connext", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", "type": "address" } ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "name": "RelayerAdded", + "type": "event" }, { + "anonymous": false, "inputs": [ { + "indexed": false, "internalType": "address", - "name": "_feeCollector", + "name": "oldVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", "type": "address" } ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "name": "RelayerFeeVaultUpdated", + "type": "event" }, { + "anonymous": false, "inputs": [ { - "internalType": "uint256", - "name": "_finalizeCooldown", - "type": "uint256" + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" } ], - "name": "setFinalizeCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "name": "RelayerRemoved", + "type": "event" }, { "inputs": [ { "internalType": "address", - "name": "_gelatoRelayer", + "name": "_relayer", "type": "address" } ], - "name": "setGelatoRelayer", + "name": "addRelayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -342721,75 +368540,64 @@ "inputs": [ { "internalType": "address", - "name": "_keep3r", + "name": "_relayer", "type": "address" } ], - "name": "setKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ + "name": "approvedRelayers", + "outputs": [ { - "internalType": "uint256", - "name": "_proposeCooldown", - "type": "uint256" + "internalType": "bool", + "name": "", + "type": "bool" } ], - "name": "setProposeAggregateRootCooldown", - "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { - "inputs": [ + "inputs": [], + "name": "relayerFeeVault", + "outputs": [ { "internalType": "address", - "name": "_spokeConnector", + "name": "", "type": "address" } ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { - "inputs": [], - "name": "spokeConnector", - "outputs": [ + "inputs": [ { - "internalType": "contract ISpokeConnector", - "name": "", + "internalType": "address", + "name": "_relayer", "type": "address" } ], - "stateMutability": "view", + "name": "removeRelayer", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", - "name": "_token", + "name": "_relayerFeeVault", "type": "address" } ], - "name": "withdraw", + "name": "setRelayerFeeVault", "outputs": [], "stateMutability": "nonpayable", "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" } ], - "blockNumber": 12448977 + "blockNumber": 2894806 }, - "RoutersFacet": { + "RoutersFacetStaging": { "address": "0x97477e71B0dacd9581bf43bEcC1DB95d6b0A998E", "abi": [ { @@ -343708,9 +369516,9 @@ "type": "function" } ], - "blockNumber": 2367446 + "blockNumber": 2894811 }, - "StableSwapFacet": { + "StableSwapFacetStaging": { "address": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", "abi": [ { @@ -344692,9 +370500,9 @@ "type": "function" } ], - "blockNumber": 2367462 + "blockNumber": 2894817 }, - "SwapAdminFacet": { + "SwapAdminFacetStaging": { "address": "0x273c33499f774D2C2466ef95352A7016474C43ee", "abi": [ { @@ -345316,10 +371124,10 @@ "type": "function" } ], - "blockNumber": 2367483 + "blockNumber": 2894823 }, "TestAdopted": { - "address": "0x745a5c100e3aAB5D683E74B98A6F04450A15997c", + "address": "0x13a1dBf4C746775F606C77f2fb36BBE90BB3b676", "abi": [ { "inputs": [ @@ -345737,10 +371545,10 @@ "type": "function" } ], - "blockNumber": 12446100 + "blockNumber": 2894878 }, "TestERC20": { - "address": "0x471F702E7D96E541488140042bCD1206Ae55CCa5", + "address": "0x3fC2E30a9868962A6b4d49116A3Dd715D38Ff707", "abi": [ { "inputs": [ @@ -346158,10 +371966,10 @@ "type": "function" } ], - "blockNumber": 2367586 + "blockNumber": 2894873 }, "TestWETH": { - "address": "0xB8E4281877946dED2945aF4d3b77900182004C93", + "address": "0x025E75D8f799f362Ac4Fe136ddc197d3055fBA60", "abi": [ { "inputs": [ @@ -346579,9 +372387,9 @@ "type": "function" } ], - "blockNumber": 2367592 + "blockNumber": 2894883 }, - "TokenFacet": { + "TokenFacetStaging": { "address": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", "abi": [ { @@ -347477,10 +373285,10 @@ "type": "function" } ], - "blockNumber": 2367415 + "blockNumber": 2894777 }, - "UpgradeBeaconController": { - "address": "0x369a0fd9Fe80aFD7Af48F6241a8Bf433e1899e7F", + "UpgradeBeaconControllerStaging": { + "address": "0x20098c6d481225fF5D9b2ca84cF68FC683e21031", "abi": [ { "inputs": [], @@ -347684,10 +373492,10 @@ "type": "function" } ], - "blockNumber": 2367377 + "blockNumber": 2889674 }, - "WatcherManager": { - "address": "0x9d07e074e80671A1a39C45c789147765c7E99fa7", + "WatcherManagerStaging": { + "address": "0x35866ab2D6BAdFF580895c883a4535e928AB7db9", "abi": [ { "inputs": [], @@ -347925,1700 +373733,7 @@ "type": "function" } ], - "blockNumber": 2367376 - }, - "X1SpokeConnector": { - "address": "0xABEe5b21a10128cC57139da3e3D2dC858358EF83", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "watcherManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minDisputeBlocks", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "disputeBlocks", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.ConstructorParams", - "name": "_baseSpokeParams", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "_mirrorNetworkId", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_activateOptimisticMode__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_constructor__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__InvalidInputHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposedHashIsFinalizedHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyOptimisticMode__SlowModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyProposer__NotAllowlistedProposer", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_proposeAggregateRoot__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_receiveAggregateRoot__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "endOfDispute", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "AggregateRootProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "MinDisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "OptimisticModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "PendingAggregateRootDeleted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "ProposedRootFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "SlowModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "name": "SnapshotRootSaved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FINALIZED_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateOptimisticMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateSlowMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "addProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedProposers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getLastCompletedSnapshotId", - "outputs": [ - { - "internalType": "uint256", - "name": "_lastCompletedSnapshotId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSnapshotDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "_snapshotDuration", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDisputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onMessageReceived", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "optimisticMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregateRootHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "removeProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "name": "setDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - } - ], - "name": "setMinDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "snapshotRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 12448933 + "blockNumber": 2657640 }, "_DefaultDiamondERC165Init": { "address": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", @@ -349642,10 +373757,10 @@ "type": "function" } ], - "blockNumber": 2367573 + "blockNumber": 2894863 }, "_DefaultDiamondLoupeFacet": { - "address": "0xCF790788Ef1DA81d555cEC33F04F7e9E13DCae11", + "address": "0x3Bcf4185443A339517aD4e580067f178d1B68E1D", "abi": [ { "inputs": [ @@ -349743,7 +373858,7 @@ "type": "function" } ], - "blockNumber": 0 + "blockNumber": 2894858 } } } @@ -1104496,499 +1128611,6 @@ ], "blockNumber": 5287625 }, - "X1HubConnector": { - "address": "0xccdAAb5B42Eb8f0618b6f2A22608D8812448e8BC", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_mirrorNetworkId", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onMessageReceived", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 5471090 - }, "_DefaultDiamondERC165Init": { "address": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", "abi": [ @@ -1105014,7 +1128636,7 @@ "blockNumber": 0 }, "_DefaultDiamondLoupeFacet": { - "address": "0xCF790788Ef1DA81d555cEC33F04F7e9E13DCae11", + "address": "0x3Bcf4185443A339517aD4e580067f178d1B68E1D", "abi": [ { "inputs": [ diff --git a/packages/deployments/contracts/deployments/fraxtal/.chainId b/packages/deployments/contracts/deployments/fraxtal/.chainId new file mode 100644 index 0000000000..1c5fd036ef --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/.chainId @@ -0,0 +1 @@ +252 \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/BridgeFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/BridgeFacetStaging.json new file mode 100644 index 0000000000..724d3e084b --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/BridgeFacetStaging.json @@ -0,0 +1,2366 @@ +{ + "address": "0x912541Ad966244F278c997E34F80A33AFF9B2857", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_invalidSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_noRelayerVault", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_valueIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__excecute_insufficientGas", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_badFastLiquidityStatus", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_externalCallFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidRouterSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidSequencerSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_maxRoutersExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notApprovedForPortals", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_unapprovedSender", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_wrongDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceReceiveLocal_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__onlyDelegate_notDelegate", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__removeSequencer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_emptyTo", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet_xcall__emptyLocalAsset", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "AavePortalMintUnbacked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct ExecuteArgs", + "name": "args", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "ExternalCalldataExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + } + ], + "name": "ForceReceiveLocal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "remote", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RemoteAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "SlippageUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "increase", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "TransferRelayerFeesIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "XAppConnectionManagerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "indexed": false, + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "XCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "addSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "approvedSequencers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_relayerFeeAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_router", + "type": "bytes32" + } + ], + "name": "enrollRemoteRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "internalType": "struct ExecuteArgs", + "name": "_args", + "type": "tuple" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + } + ], + "name": "forceReceiveLocal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + } + ], + "name": "forceUpdateSlippage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "remote", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "removeSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "routedTransfers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + } + ], + "name": "setXAppConnectionManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "transferStatus", + "outputs": [ + { + "internalType": "enum DestinationTransferStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "xAppConnectionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0xc2127b2cc86daba25e83c2328ac63f272cb1c3bb32617584f730a2b42e670f11", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "4570901", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x01c3d13f0231f0e06cc22305696cec7bdc8dcde2e4ad553c74592637a56594ad", + "transactionHash": "0xc2127b2cc86daba25e83c2328ac63f272cb1c3bb32617584f730a2b42e670f11", + "logs": [], + "blockNumber": 2894784, + "cumulativeGasUsed": "4638563", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__getTokenIndexFromStableSwapPool_notExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__addRemote_invalidDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__addRemote_invalidRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__addSequencer_alreadyApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__addSequencer_invalidSequencer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__bumpTransfer_noRelayerVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__bumpTransfer_valueIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__excecute_insufficientGas\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_badFastLiquidityStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_externalCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_invalidRouterSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_invalidSequencerSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_maxRoutersExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_notApprovedForPortals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_notReconciled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_notSupportedRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_notSupportedSequencer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_unapprovedSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__execute_wrongDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__forceReceiveLocal_notDestination\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__forceUpdateSlippage_invalidSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__forceUpdateSlippage_notDestination\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__mustHaveRemote_destinationNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__onlyDelegate_notDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__removeSequencer_notApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__setXAppConnectionManager_domainsDontMatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__xcall_capReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__xcall_emptyTo\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__xcall_invalidSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet__xcall_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BridgeFacet_xcall__emptyLocalAsset\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AavePortalMintUnbacked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"routerSignatures\",\"type\":\"bytes[]\"},{\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSignature\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ExecuteArgs\",\"name\":\"args\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"ExternalCalldataExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"name\":\"ForceReceiveLocal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"remote\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RemoteAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SequencerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SequencerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"}],\"name\":\"SlippageUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"increase\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"TransferRelayerFeesIncreased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"XAppConnectionManagerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"XCalled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"addSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"approvedSequencers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"bumpTransfer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_relayerFeeAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_relayerFee\",\"type\":\"uint256\"}],\"name\":\"bumpTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_router\",\"type\":\"bytes32\"}],\"name\":\"enrollRemoteRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"routerSignatures\",\"type\":\"bytes[]\"},{\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSignature\",\"type\":\"bytes\"}],\"internalType\":\"struct ExecuteArgs\",\"name\":\"_args\",\"type\":\"tuple\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"}],\"name\":\"forceReceiveLocal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"}],\"name\":\"forceUpdateSlippage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"remote\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sequencer\",\"type\":\"address\"}],\"name\":\"removeSequencer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"routedTransfers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_xAppConnectionManager\",\"type\":\"address\"}],\"name\":\"setXAppConnectionManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"transferStatus\",\"outputs\":[{\"internalType\":\"enum DestinationTransferStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xAppConnectionManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destination\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"xcall\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destination\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_relayerFee\",\"type\":\"uint256\"}],\"name\":\"xcall\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destination\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_relayerFee\",\"type\":\"uint256\"}],\"name\":\"xcallIntoLocal\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destination\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_slippage\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"}],\"name\":\"xcallIntoLocal\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AavePortalMintUnbacked(bytes32,address,address,uint256)\":{\"params\":{\"amount\":\"- The amount of asset that was provided by Aave Portal\",\"asset\":\"- The asset that was provided by Aave Portal\",\"router\":\"- The authorized router that used Aave Portal liquidity\",\"transferId\":\"- The unique identifier of the crosschain transaction\"}},\"Executed(bytes32,address,address,((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),address,uint256,address)\":{\"details\":\"`execute` may be called when providing fast liquidity or when processing a reconciled (slow) transfer.\",\"params\":{\"amount\":\"- The amount of transferring asset the recipient address receives or the external call is executed with.\",\"args\":\"- The `ExecuteArgs` provided to the function.\",\"asset\":\"- The asset the recipient is given or the external call is executed with. Should be the adopted asset on that chain.\",\"caller\":\"- The account that called the function.\",\"local\":\"- The local asset that was either supplied by the router for a fast-liquidity transfer or minted by the bridge in a reconciled (slow) transfer. Could be the same as the adopted `asset` param.\",\"to\":\"- The recipient `TransferInfo.to` provided, created as indexed parameter.\",\"transferId\":\"- The unique identifier of the crosschain transfer.\"}},\"ExternalCalldataExecuted(bytes32,bool,bytes)\":{\"params\":{\"returnData\":\"- Return bytes from the IXReceiver\",\"success\":\"- Whether calldata succeeded\",\"transferId\":\"- The unique identifier of the crosschain transfer.\"}},\"ForceReceiveLocal(bytes32)\":{\"params\":{\"transferId\":\"- The unique identifier of the crosschain transaction\"}},\"RemoteAdded(uint32,address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"domain\":\"- The domain the remote instance is on\",\"remote\":\"- The address of the remote instance\"}},\"SequencerAdded(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"sequencer\":\"- The sequencer address to be added or removed\"}},\"SequencerRemoved(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"sequencer\":\"- The sequencer address to be added or removed\"}},\"SlippageUpdated(bytes32,uint256)\":{\"params\":{\"slippage\":\"- The updated slippage boundary\",\"transferId\":\"- The unique identifier of the crosschain transaction\"}},\"TransferRelayerFeesIncreased(bytes32,uint256,address,address)\":{\"params\":{\"asset\":\"- The asset the fee was increased with\",\"caller\":\"- The account that called the function\",\"increase\":\"- The additional amount fees increased by\",\"transferId\":\"- The unique identifier of the crosschain transaction\"}},\"XAppConnectionManagerSet(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"updated\":\"- The updated address\"}},\"XCalled(bytes32,uint256,bytes32,(uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,address,bytes)\":{\"params\":{\"amount\":\"- The amount sent in with xcall\",\"asset\":\"- The asset sent in with xcall\",\"local\":\"- The local asset that is controlled by the bridge and can be burned/minted\",\"messageHash\":\"- The hash of the message bytes (containing all transfer info) that were bridged.\",\"nonce\":\"- The bridge nonce of the transfer on the origin domain.\",\"params\":\"- The `TransferInfo` provided to the function.\",\"transferId\":\"- The unique identifier of the crosschain transfer.\"}}},\"kind\":\"dev\",\"methods\":{\"addSequencer(address)\":{\"params\":{\"_sequencer\":\"- The sequencer address to add.\"}},\"bumpTransfer(bytes32)\":{\"params\":{\"_transferId\":\"- The unique identifier of the crosschain transaction\"}},\"bumpTransfer(bytes32,address,uint256)\":{\"params\":{\"_relayerFee\":\"- The amount you want to bump transfer fee with\",\"_relayerFeeAsset\":\"- The asset you are bumping fee with\",\"_transferId\":\"- The unique identifier of the crosschain transaction\"}},\"enrollRemoteRouter(uint32,bytes32)\":{\"params\":{\"_domain\":\"The domain of the remote xApp Router\",\"_router\":\"The address of the remote xApp Router\"}},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))\":{\"details\":\"Can be called before or after `handle` [reconcile] is called (regarding the same transfer), depending on whether the fast liquidity route (i.e. funds provided by routers) is being used for this transfer. As a result, executed calldata (including properties like `originSender`) may or may not be verified depending on whether the reconcile has been completed (i.e. the optimistic confirmation period has elapsed).\",\"params\":{\"_args\":\"- ExecuteArgs arguments.\"},\"returns\":{\"_0\":\"bytes32 - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur.\"}},\"forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))\":{\"details\":\"Calldata will still be executed with the local asset. `IXReceiver` contracts should be able to handle local assets in event of failures.\",\"params\":{\"_params\":\"TransferInfo associated with the transfer\"}},\"forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)\":{\"params\":{\"_params\":\"TransferInfo associated with the transfer\",\"_slippage\":\"The updated slippage\"}},\"removeSequencer(address)\":{\"params\":{\"_sequencer\":\"- The sequencer address to remove.\"}},\"setXAppConnectionManager(address)\":{\"params\":{\"_xAppConnectionManager\":\"The address of the xAppConnectionManager contract\"}}},\"version\":1},\"userdoc\":{\"events\":{\"AavePortalMintUnbacked(bytes32,address,address,uint256)\":{\"notice\":\"Emitted when a router used Aave Portal liquidity for fast transfer\"},\"Executed(bytes32,address,address,((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),address,uint256,address)\":{\"notice\":\"Emitted when `execute` is called on the destination domain of a transfer.\"},\"ExternalCalldataExecuted(bytes32,bool,bytes)\":{\"notice\":\"Emitted when a transfer has its external data executed\"},\"ForceReceiveLocal(bytes32)\":{\"notice\":\"Emitted when `forceReceiveLocal` is called by a user-delegated EOA on the destination domain\"},\"RemoteAdded(uint32,address,address)\":{\"notice\":\"Emitted when a new remote instance is added\"},\"SequencerAdded(address,address)\":{\"notice\":\"Emitted when a sequencer is added or removed from allowlists\"},\"SequencerRemoved(address,address)\":{\"notice\":\"Emitted when a sequencer is added or removed from allowlists\"},\"SlippageUpdated(bytes32,uint256)\":{\"notice\":\"Emitted when `forceUpdateSlippage` is called by user-delegated EOA on the destination domain\"},\"TransferRelayerFeesIncreased(bytes32,uint256,address,address)\":{\"notice\":\"Emitted when `_bumpTransfer` is called by an user on the origin domain both in `xcall` and `bumpTransfer`\"},\"XAppConnectionManagerSet(address,address)\":{\"notice\":\"Emitted `xAppConnectionManager` is updated\"},\"XCalled(bytes32,uint256,bytes32,(uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,address,bytes)\":{\"notice\":\"Emitted when `xcall` is called on the origin domain of a transfer.\"}},\"kind\":\"user\",\"methods\":{\"addSequencer(address)\":{\"notice\":\"Used to add an approved sequencer to the allowlist.\"},\"bumpTransfer(bytes32)\":{\"notice\":\"Anyone can call this function on the origin domain to increase the relayer fee for a transfer.\"},\"bumpTransfer(bytes32,address,uint256)\":{\"notice\":\"Anyone can call this function on the origin domain t o increase the relayer fee for a given transfer using a specific asset.\"},\"enrollRemoteRouter(uint32,bytes32)\":{\"notice\":\"Register the address of a Router contract for the same xApp on a remote chain\"},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))\":{\"notice\":\"Called on a destination domain to disburse correct assets to end recipient and execute any included calldata.\"},\"forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))\":{\"notice\":\"Allows a user-specified account to withdraw the local asset directly\"},\"forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)\":{\"notice\":\"Allows a user-specified account to update the slippage they are willing to take on destination transfers.\"},\"removeSequencer(address)\":{\"notice\":\"Used to remove an approved sequencer from the allowlist.\"},\"setXAppConnectionManager(address)\":{\"notice\":\"Modify the contract the xApp uses to validate Replica contracts\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/BridgeFacet.sol\":\"BridgeFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/BridgeFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {ExcessivelySafeCall} from \\\"../../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IOutbox} from \\\"../../../messaging/interfaces/IOutbox.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus, TokenConfig} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {BridgeMessage} from \\\"../libraries/BridgeMessage.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {IXReceiver} from \\\"../interfaces/IXReceiver.sol\\\";\\nimport {IAavePool} from \\\"../interfaces/IAavePool.sol\\\";\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\n/**\\n * @notice Defines the fields needed for an asset transfer\\n * @param asset - The address of the asset\\n * @param amount - The amount of the asset\\n */\\nstruct AssetTransfer {\\n address asset;\\n uint256 amount;\\n}\\n\\ncontract BridgeFacet is BaseConnextFacet {\\n // ============ Libraries ============\\n\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n using BridgeMessage for bytes29;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ========== Custom Errors ===========\\n\\n error BridgeFacet__addRemote_invalidRouter();\\n error BridgeFacet__addRemote_invalidDomain();\\n error BridgeFacet__onlyDelegate_notDelegate();\\n error BridgeFacet__addSequencer_invalidSequencer();\\n error BridgeFacet__addSequencer_alreadyApproved();\\n error BridgeFacet__removeSequencer_notApproved();\\n error BridgeFacet__setXAppConnectionManager_domainsDontMatch();\\n error BridgeFacet__xcall_nativeAssetNotSupported();\\n error BridgeFacet__xcall_emptyTo();\\n error BridgeFacet__xcall_invalidSlippage();\\n error BridgeFacet_xcall__emptyLocalAsset();\\n error BridgeFacet__xcall_capReached();\\n error BridgeFacet__execute_unapprovedSender();\\n error BridgeFacet__execute_wrongDomain();\\n error BridgeFacet__execute_notSupportedSequencer();\\n error BridgeFacet__execute_invalidSequencerSignature();\\n error BridgeFacet__execute_maxRoutersExceeded();\\n error BridgeFacet__execute_notSupportedRouter();\\n error BridgeFacet__execute_invalidRouterSignature();\\n error BridgeFacet__execute_notApprovedForPortals();\\n error BridgeFacet__execute_badFastLiquidityStatus();\\n error BridgeFacet__execute_notReconciled();\\n error BridgeFacet__execute_externalCallFailed();\\n error BridgeFacet__excecute_insufficientGas();\\n error BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn();\\n error BridgeFacet__bumpTransfer_valueIsZero();\\n error BridgeFacet__bumpTransfer_noRelayerVault();\\n error BridgeFacet__forceUpdateSlippage_invalidSlippage();\\n error BridgeFacet__forceUpdateSlippage_notDestination();\\n error BridgeFacet__forceReceiveLocal_notDestination();\\n error BridgeFacet__mustHaveRemote_destinationNotSupported();\\n\\n // ============ Properties ============\\n\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted when `xcall` is called on the origin domain of a transfer.\\n * @param transferId - The unique identifier of the crosschain transfer.\\n * @param nonce - The bridge nonce of the transfer on the origin domain.\\n * @param messageHash - The hash of the message bytes (containing all transfer info) that were bridged.\\n * @param params - The `TransferInfo` provided to the function.\\n * @param asset - The asset sent in with xcall\\n * @param amount - The amount sent in with xcall\\n * @param local - The local asset that is controlled by the bridge and can be burned/minted\\n */\\n event XCalled(\\n bytes32 indexed transferId,\\n uint256 indexed nonce,\\n bytes32 indexed messageHash,\\n TransferInfo params,\\n address asset,\\n uint256 amount,\\n address local,\\n bytes messageBody\\n );\\n\\n /**\\n * @notice Emitted when a transfer has its external data executed\\n * @param transferId - The unique identifier of the crosschain transfer.\\n * @param success - Whether calldata succeeded\\n * @param returnData - Return bytes from the IXReceiver\\n */\\n event ExternalCalldataExecuted(bytes32 indexed transferId, bool success, bytes returnData);\\n\\n /**\\n * @notice Emitted when `execute` is called on the destination domain of a transfer.\\n * @dev `execute` may be called when providing fast liquidity or when processing a reconciled (slow) transfer.\\n * @param transferId - The unique identifier of the crosschain transfer.\\n * @param to - The recipient `TransferInfo.to` provided, created as indexed parameter.\\n * @param asset - The asset the recipient is given or the external call is executed with. Should be the\\n * adopted asset on that chain.\\n * @param args - The `ExecuteArgs` provided to the function.\\n * @param local - The local asset that was either supplied by the router for a fast-liquidity transfer or\\n * minted by the bridge in a reconciled (slow) transfer. Could be the same as the adopted `asset` param.\\n * @param amount - The amount of transferring asset the recipient address receives or the external call is\\n * executed with.\\n * @param caller - The account that called the function.\\n */\\n event Executed(\\n bytes32 indexed transferId,\\n address indexed to,\\n address indexed asset,\\n ExecuteArgs args,\\n address local,\\n uint256 amount,\\n address caller\\n );\\n\\n /**\\n * @notice Emitted when `_bumpTransfer` is called by an user on the origin domain both in\\n * `xcall` and `bumpTransfer`\\n * @param transferId - The unique identifier of the crosschain transaction\\n * @param increase - The additional amount fees increased by\\n * @param asset - The asset the fee was increased with\\n * @param caller - The account that called the function\\n */\\n event TransferRelayerFeesIncreased(bytes32 indexed transferId, uint256 increase, address asset, address caller);\\n\\n /**\\n * @notice Emitted when `forceUpdateSlippage` is called by user-delegated EOA\\n * on the destination domain\\n * @param transferId - The unique identifier of the crosschain transaction\\n * @param slippage - The updated slippage boundary\\n */\\n event SlippageUpdated(bytes32 indexed transferId, uint256 slippage);\\n\\n /**\\n * @notice Emitted when `forceReceiveLocal` is called by a user-delegated EOA\\n * on the destination domain\\n * @param transferId - The unique identifier of the crosschain transaction\\n */\\n event ForceReceiveLocal(bytes32 indexed transferId);\\n\\n /**\\n * @notice Emitted when a router used Aave Portal liquidity for fast transfer\\n * @param transferId - The unique identifier of the crosschain transaction\\n * @param router - The authorized router that used Aave Portal liquidity\\n * @param asset - The asset that was provided by Aave Portal\\n * @param amount - The amount of asset that was provided by Aave Portal\\n */\\n event AavePortalMintUnbacked(bytes32 indexed transferId, address indexed router, address asset, uint256 amount);\\n\\n /**\\n * @notice Emitted when a new remote instance is added\\n * @param domain - The domain the remote instance is on\\n * @param remote - The address of the remote instance\\n * @param caller - The account that called the function\\n */\\n event RemoteAdded(uint32 domain, address remote, address caller);\\n\\n /**\\n * @notice Emitted when a sequencer is added or removed from allowlists\\n * @param sequencer - The sequencer address to be added or removed\\n * @param caller - The account that called the function\\n */\\n event SequencerAdded(address sequencer, address caller);\\n\\n /**\\n * @notice Emitted when a sequencer is added or removed from allowlists\\n * @param sequencer - The sequencer address to be added or removed\\n * @param caller - The account that called the function\\n */\\n event SequencerRemoved(address sequencer, address caller);\\n\\n /**\\n * @notice Emitted `xAppConnectionManager` is updated\\n * @param updated - The updated address\\n * @param caller - The account that called the function\\n */\\n event XAppConnectionManagerSet(address updated, address caller);\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Only accept a transfer's designated delegate.\\n * @param _params The TransferInfo of the transfer.\\n */\\n modifier onlyDelegate(TransferInfo calldata _params) {\\n if (_params.delegate != msg.sender) revert BridgeFacet__onlyDelegate_notDelegate();\\n _;\\n }\\n\\n // ============ Getters ============\\n\\n function routedTransfers(bytes32 _transferId) public view returns (address[] memory) {\\n return s.routedTransfers[_transferId];\\n }\\n\\n function transferStatus(bytes32 _transferId) public view returns (DestinationTransferStatus) {\\n return s.transferStatus[_transferId];\\n }\\n\\n function remote(uint32 _domain) public view returns (address) {\\n return TypeCasts.bytes32ToAddress(s.remotes[_domain]);\\n }\\n\\n function domain() public view returns (uint32) {\\n return s.domain;\\n }\\n\\n function nonce() public view returns (uint256) {\\n return s.nonce;\\n }\\n\\n function approvedSequencers(address _sequencer) external view returns (bool) {\\n return s.approvedSequencers[_sequencer];\\n }\\n\\n function xAppConnectionManager() public view returns (address) {\\n return address(s.xAppConnectionManager);\\n }\\n\\n // ============ Admin Functions ==============\\n\\n /**\\n * @notice Used to add an approved sequencer to the allowlist.\\n * @param _sequencer - The sequencer address to add.\\n */\\n function addSequencer(address _sequencer) external onlyOwnerOrAdmin {\\n if (_sequencer == address(0)) revert BridgeFacet__addSequencer_invalidSequencer();\\n\\n if (s.approvedSequencers[_sequencer]) revert BridgeFacet__addSequencer_alreadyApproved();\\n s.approvedSequencers[_sequencer] = true;\\n\\n emit SequencerAdded(_sequencer, msg.sender);\\n }\\n\\n /**\\n * @notice Used to remove an approved sequencer from the allowlist.\\n * @param _sequencer - The sequencer address to remove.\\n */\\n function removeSequencer(address _sequencer) external onlyOwnerOrAdmin {\\n if (!s.approvedSequencers[_sequencer]) revert BridgeFacet__removeSequencer_notApproved();\\n delete s.approvedSequencers[_sequencer];\\n\\n emit SequencerRemoved(_sequencer, msg.sender);\\n }\\n\\n /**\\n * @notice Modify the contract the xApp uses to validate Replica contracts\\n * @param _xAppConnectionManager The address of the xAppConnectionManager contract\\n */\\n function setXAppConnectionManager(address _xAppConnectionManager) external onlyOwnerOrAdmin {\\n IConnectorManager manager = IConnectorManager(_xAppConnectionManager);\\n if (manager.localDomain() != s.domain) {\\n revert BridgeFacet__setXAppConnectionManager_domainsDontMatch();\\n }\\n emit XAppConnectionManagerSet(_xAppConnectionManager, msg.sender);\\n s.xAppConnectionManager = manager;\\n }\\n\\n /**\\n * @notice Register the address of a Router contract for the same xApp on a remote chain\\n * @param _domain The domain of the remote xApp Router\\n * @param _router The address of the remote xApp Router\\n */\\n function enrollRemoteRouter(uint32 _domain, bytes32 _router) external onlyOwnerOrAdmin {\\n if (_router == bytes32(\\\"\\\")) revert BridgeFacet__addRemote_invalidRouter();\\n\\n // Make sure we aren't setting the current domain (or an empty one) as the connextion.\\n if (_domain == 0 || _domain == s.domain) {\\n revert BridgeFacet__addRemote_invalidDomain();\\n }\\n\\n s.remotes[_domain] = _router;\\n emit RemoteAdded(_domain, TypeCasts.bytes32ToAddress(_router), msg.sender);\\n }\\n\\n // ============ Public Functions: Bridge ==============\\n\\n function xcall(\\n uint32 _destination,\\n address _to,\\n address _asset,\\n address _delegate,\\n uint256 _amount,\\n uint256 _slippage,\\n bytes calldata _callData\\n ) external payable nonXCallReentrant returns (bytes32) {\\n // NOTE: Here, we fill in as much information as we can for the TransferInfo.\\n // Some info is left blank and will be assigned in the internal `_xcall` function (e.g.\\n // `normalizedIn`, `bridgedAmt`, canonical info, etc).\\n TransferInfo memory params = TransferInfo({\\n to: _to,\\n callData: _callData,\\n originDomain: s.domain,\\n destinationDomain: _destination,\\n delegate: _delegate,\\n // `receiveLocal: false` indicates we should always deliver the adopted asset on the\\n // destination chain, swapping from the local asset if needed.\\n receiveLocal: false,\\n slippage: _slippage,\\n originSender: msg.sender,\\n // The following values should be assigned in _xcall.\\n nonce: 0,\\n canonicalDomain: 0,\\n bridgedAmt: 0,\\n normalizedIn: 0,\\n canonicalId: bytes32(0)\\n });\\n return _xcall(params, AssetTransfer(_asset, _amount), AssetTransfer(address(0), msg.value));\\n }\\n\\n function xcallIntoLocal(\\n uint32 _destination,\\n address _to,\\n address _asset,\\n address _delegate,\\n uint256 _amount,\\n uint256 _slippage,\\n bytes calldata _callData\\n ) external payable nonXCallReentrant returns (bytes32) {\\n // NOTE: Here, we fill in as much information as we can for the TransferInfo.\\n // Some info is left blank and will be assigned in the internal `_xcall` function (e.g.\\n // `normalizedIn`, `bridgedAmt`, canonical info, etc).\\n TransferInfo memory params = TransferInfo({\\n to: _to,\\n callData: _callData,\\n originDomain: s.domain,\\n destinationDomain: _destination,\\n delegate: _delegate,\\n // `receiveLocal: true` indicates we should always deliver the local asset on the\\n // destination chain, and NOT swap into any adopted assets.\\n receiveLocal: true,\\n slippage: _slippage,\\n originSender: msg.sender,\\n // The following values should be assigned in _xcall.\\n nonce: 0,\\n canonicalDomain: 0,\\n bridgedAmt: 0,\\n normalizedIn: 0,\\n canonicalId: bytes32(0)\\n });\\n return _xcall(params, AssetTransfer(_asset, _amount), AssetTransfer(address(0), msg.value));\\n }\\n\\n function xcall(\\n uint32 _destination,\\n address _to,\\n address _asset,\\n address _delegate,\\n uint256 _amount,\\n uint256 _slippage,\\n bytes calldata _callData,\\n uint256 _relayerFee\\n ) external nonXCallReentrant returns (bytes32) {\\n // NOTE: Here, we fill in as much information as we can for the TransferInfo.\\n // Some info is left blank and will be assigned in the internal `_xcall` function (e.g.\\n // `normalizedIn`, `bridgedAmt`, canonical info, etc).\\n TransferInfo memory params = TransferInfo({\\n to: _to,\\n callData: _callData,\\n originDomain: s.domain,\\n destinationDomain: _destination,\\n delegate: _delegate,\\n // `receiveLocal: false` indicates we should always deliver the adopted asset on the\\n // destination chain, swapping from the local asset if needed.\\n receiveLocal: false,\\n slippage: _slippage,\\n originSender: msg.sender,\\n // The following values should be assigned in _xcall.\\n nonce: 0,\\n canonicalDomain: 0,\\n bridgedAmt: 0,\\n normalizedIn: 0,\\n canonicalId: bytes32(0)\\n });\\n return _xcall(params, AssetTransfer(_asset, _amount), AssetTransfer(_asset, _relayerFee));\\n }\\n\\n function xcallIntoLocal(\\n uint32 _destination,\\n address _to,\\n address _asset,\\n address _delegate,\\n uint256 _amount,\\n uint256 _slippage,\\n bytes calldata _callData,\\n uint256 _relayerFee\\n ) external nonXCallReentrant returns (bytes32) {\\n // NOTE: Here, we fill in as much information as we can for the TransferInfo.\\n // Some info is left blank and will be assigned in the internal `_xcall` function (e.g.\\n // `normalizedIn`, `bridgedAmt`, canonical info, etc).\\n TransferInfo memory params = TransferInfo({\\n to: _to,\\n callData: _callData,\\n originDomain: s.domain,\\n destinationDomain: _destination,\\n delegate: _delegate,\\n // `receiveLocal: true` indicates we should always deliver the local asset on the\\n // destination chain, and NOT swap into any adopted assets.\\n receiveLocal: true,\\n slippage: _slippage,\\n originSender: msg.sender,\\n // The following values should be assigned in _xcall.\\n nonce: 0,\\n canonicalDomain: 0,\\n bridgedAmt: 0,\\n normalizedIn: 0,\\n canonicalId: bytes32(0)\\n });\\n return _xcall(params, AssetTransfer(_asset, _amount), AssetTransfer(_asset, _relayerFee));\\n }\\n\\n /**\\n * @notice Called on a destination domain to disburse correct assets to end recipient and execute any included\\n * calldata.\\n *\\n * @dev Can be called before or after `handle` [reconcile] is called (regarding the same transfer), depending on\\n * whether the fast liquidity route (i.e. funds provided by routers) is being used for this transfer. As a result,\\n * executed calldata (including properties like `originSender`) may or may not be verified depending on whether the\\n * reconcile has been completed (i.e. the optimistic confirmation period has elapsed).\\n *\\n * @param _args - ExecuteArgs arguments.\\n * @return bytes32 - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\\n * reconciliation to occur.\\n */\\n function execute(ExecuteArgs calldata _args) external nonReentrant whenNotPaused returns (bytes32) {\\n (bytes32 transferId, DestinationTransferStatus status) = _executeSanityChecks(_args);\\n\\n DestinationTransferStatus updated = status == DestinationTransferStatus.Reconciled\\n ? DestinationTransferStatus.Completed\\n : DestinationTransferStatus.Executed;\\n\\n s.transferStatus[transferId] = updated;\\n\\n // Supply assets to target recipient. Use router liquidity when this is a fast transfer, or mint bridge tokens\\n // when this is a slow transfer.\\n // NOTE: Asset will be adopted unless specified to `receiveLocal` in params.\\n (uint256 amountOut, address asset, address local) = _handleExecuteLiquidity(\\n transferId,\\n AssetLogic.calculateCanonicalHash(_args.params.canonicalId, _args.params.canonicalDomain),\\n updated != DestinationTransferStatus.Completed,\\n _args\\n );\\n\\n // Execute the transaction using the designated calldata.\\n uint256 amount = _handleExecuteTransaction(\\n _args,\\n amountOut,\\n asset,\\n transferId,\\n updated == DestinationTransferStatus.Completed\\n );\\n\\n // Emit event.\\n emit Executed(transferId, _args.params.to, asset, _args, local, amount, msg.sender);\\n\\n return transferId;\\n }\\n\\n /**\\n * @notice Anyone can call this function on the origin domain to increase the relayer fee for a transfer.\\n * @param _transferId - The unique identifier of the crosschain transaction\\n */\\n function bumpTransfer(bytes32 _transferId) external payable nonReentrant whenNotPaused {\\n _bumpTransfer(_transferId, address(0), msg.value);\\n }\\n\\n /**\\n * @notice Anyone can call this function on the origin domain t o increase the relayer fee for\\n * a given transfer using a specific asset.\\n * @param _transferId - The unique identifier of the crosschain transaction\\n * @param _relayerFeeAsset - The asset you are bumping fee with\\n * @param _relayerFee - The amount you want to bump transfer fee with\\n */\\n function bumpTransfer(\\n bytes32 _transferId,\\n address _relayerFeeAsset,\\n uint256 _relayerFee\\n ) external nonReentrant whenNotPaused {\\n if (_relayerFee == 0) revert BridgeFacet__bumpTransfer_valueIsZero();\\n // check that the asset is whitelisted (the following reverts if asset\\n // is not approved)\\n _getApprovedCanonicalId(_relayerFeeAsset);\\n // handle transferring asset to the relayer fee vault\\n _bumpTransfer(_transferId, _relayerFeeAsset, _relayerFee);\\n }\\n\\n /**\\n * @notice Allows a user-specified account to update the slippage they are willing\\n * to take on destination transfers.\\n *\\n * @param _params TransferInfo associated with the transfer\\n * @param _slippage The updated slippage\\n */\\n function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external onlyDelegate(_params) {\\n // Sanity check slippage\\n if (_slippage > Constants.BPS_FEE_DENOMINATOR) {\\n revert BridgeFacet__forceUpdateSlippage_invalidSlippage();\\n }\\n\\n // Should only be called on destination domain\\n if (_params.destinationDomain != s.domain) {\\n revert BridgeFacet__forceUpdateSlippage_notDestination();\\n }\\n\\n // Get transferId\\n bytes32 transferId = _calculateTransferId(_params);\\n\\n // Store overrides\\n s.slippage[transferId] = _slippage;\\n\\n // Emit event\\n emit SlippageUpdated(transferId, _slippage);\\n }\\n\\n /**\\n * @notice Allows a user-specified account to withdraw the local asset directly\\n * @dev Calldata will still be executed with the local asset. `IXReceiver` contracts\\n * should be able to handle local assets in event of failures.\\n * @param _params TransferInfo associated with the transfer\\n */\\n function forceReceiveLocal(TransferInfo calldata _params) external onlyDelegate(_params) {\\n // Should only be called on destination domain\\n if (_params.destinationDomain != s.domain) {\\n revert BridgeFacet__forceReceiveLocal_notDestination();\\n }\\n\\n // Get transferId\\n bytes32 transferId = _calculateTransferId(_params);\\n\\n // Store overrides\\n s.receiveLocalOverride[transferId] = true;\\n\\n // Emit event\\n emit ForceReceiveLocal(transferId);\\n }\\n\\n // ============ Internal: Bridge ============\\n\\n /**\\n * @notice Initiates a cross-chain transfer of funds and/or calldata\\n *\\n * @dev For ERC20 transfers, this contract must have approval to transfer the input (transacting) assets. The adopted\\n * assets will be swapped for their local asset counterparts (i.e. bridgeable tokens) via the configured AMM if\\n * necessary. In the event that the adopted assets *are* local bridge assets, no swap is needed. The local tokens will\\n * then be sent via the bridge router. If the local assets are representational for an asset on another chain, we will\\n * burn the tokens here. If the local assets are canonical (meaning that the adopted<>local asset pairing is native\\n * to this chain), we will custody the tokens here.\\n *\\n * @param _params - The TransferInfo arguments.\\n * @return bytes32 - The transfer ID of the newly created crosschain transfer.\\n */\\n function _xcall(\\n TransferInfo memory _params,\\n AssetTransfer memory _asset,\\n AssetTransfer memory _relayer\\n )\\n internal\\n // address _asset,\\n // uint256 _amount,\\n // address _relayerFeeAsset,\\n // uint256 _relayerFee\\n whenNotPaused\\n returns (bytes32)\\n {\\n // Sanity checks.\\n bytes32 remoteInstance;\\n {\\n // Not native asset.\\n // NOTE: We support using address(0) as an intuitive default if you are sending a 0-value\\n // transfer. In that edge case, address(0) will not be registered as a supported asset, but should\\n // pass the `isLocalOrigin` check\\n if (_asset.asset == address(0) && _asset.amount != 0) {\\n revert BridgeFacet__xcall_nativeAssetNotSupported();\\n }\\n\\n // Destination domain is supported.\\n // NOTE: This check implicitly also checks that `_params.destinationDomain != s.domain`, because the index\\n // `s.domain` of `s.remotes` should always be `bytes32(0)`.\\n remoteInstance = _mustHaveRemote(_params.destinationDomain);\\n\\n // Recipient defined.\\n if (_params.to == address(0)) {\\n revert BridgeFacet__xcall_emptyTo();\\n }\\n\\n if (_params.slippage > Constants.BPS_FEE_DENOMINATOR) {\\n revert BridgeFacet__xcall_invalidSlippage();\\n }\\n }\\n\\n // NOTE: The local asset will stay address(0) if input asset is address(0) in the event of a\\n // 0-value transfer. Otherwise, the local address will be retrieved below\\n address local;\\n bytes32 transferId;\\n TokenId memory canonical;\\n bool isCanonical;\\n {\\n // Check that the asset is supported -- can be either adopted or local.\\n // NOTE: Above we check that you can only have `address(0)` as the input asset if this is a\\n // 0-value transfer. Because 0-value transfers short-circuit all checks on mappings keyed on\\n // hash(canonicalId, canonicalDomain), this is safe even when the address(0) asset is not\\n // allowlisted.\\n if (_asset.asset != address(0)) {\\n // Retrieve the canonical token information.\\n bytes32 key;\\n (canonical, key) = _getApprovedCanonicalId(_asset.asset);\\n\\n // Get the token config.\\n TokenConfig storage config = AssetLogic.getConfig(key);\\n\\n // Set boolean flag\\n isCanonical = _params.originDomain == canonical.domain;\\n\\n // Get the local address\\n local = isCanonical ? TypeCasts.bytes32ToAddress(canonical.id) : config.representation;\\n if (local == address(0)) {\\n revert BridgeFacet_xcall__emptyLocalAsset();\\n }\\n\\n {\\n // Enforce liquidity caps.\\n // NOTE: Safe to do this before the swap because canonical domains do\\n // not hit the AMMs (local == canonical).\\n uint256 cap = config.cap;\\n if (isCanonical && cap > 0) {\\n // NOTE: this method includes router liquidity as part of the caps,\\n // not only the minted amount\\n uint256 newCustodiedAmount = config.custodied + _asset.amount;\\n if (newCustodiedAmount > cap) {\\n revert BridgeFacet__xcall_capReached();\\n }\\n s.tokenConfigs[key].custodied = newCustodiedAmount;\\n }\\n }\\n\\n // Update TransferInfo to reflect the canonical token information.\\n _params.canonicalDomain = canonical.domain;\\n _params.canonicalId = canonical.id;\\n\\n if (_asset.amount > 0) {\\n // Transfer funds of input asset to the contract from the user.\\n AssetLogic.handleIncomingAsset(_asset.asset, _asset.amount);\\n\\n // Swap to the local asset from adopted if applicable.\\n _params.bridgedAmt = AssetLogic.swapToLocalAssetIfNeeded(\\n key,\\n _asset.asset,\\n local,\\n _asset.amount,\\n _params.slippage\\n );\\n\\n // Get the normalized amount in (amount sent in by user in 18 decimals).\\n // NOTE: when getting the decimals from `_asset`, you don't know if you are looking for\\n // adopted or local assets\\n _params.normalizedIn = AssetLogic.normalizeDecimals(\\n _asset.asset == local ? config.representationDecimals : config.adoptedDecimals,\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n _asset.amount\\n );\\n }\\n }\\n\\n // Calculate the transfer ID.\\n _params.nonce = s.nonce++;\\n transferId = _calculateTransferId(_params);\\n }\\n\\n // Handle the relayer fee.\\n // NOTE: This has to be done *after* transferring in + swapping assets because\\n // the transfer id uses the amount that is bridged (i.e. amount in local asset).\\n if (_relayer.amount > 0) {\\n _bumpTransfer(transferId, _relayer.asset, _relayer.amount);\\n }\\n\\n // Send the crosschain message.\\n _sendMessageAndEmit(\\n transferId,\\n _params,\\n _asset.asset,\\n _asset.amount,\\n remoteInstance,\\n canonical,\\n local,\\n isCanonical\\n );\\n\\n return transferId;\\n }\\n\\n /**\\n * @notice An internal function to handle the bumping of transfers\\n * @param _transferId - The unique identifier of the crosschain transaction\\n * @param _relayerFeeAsset - The asset you are bumping fee with\\n * @param _relayerFee - The amount you want to bump transfer fee with\\n */\\n function _bumpTransfer(bytes32 _transferId, address _relayerFeeAsset, uint256 _relayerFee) internal {\\n address relayerVault = s.relayerFeeVault;\\n if (relayerVault == address(0)) revert BridgeFacet__bumpTransfer_noRelayerVault();\\n if (_relayerFeeAsset == address(0)) {\\n if (msg.value == 0) revert BridgeFacet__bumpTransfer_valueIsZero();\\n Address.sendValue(payable(relayerVault), _relayerFee);\\n } else {\\n // Pull funds from user to this contract\\n // NOTE: could transfer to `relayerFeeVault`, but that would be unintuitive for user\\n // approvals\\n AssetLogic.handleIncomingAsset(_relayerFeeAsset, _relayerFee);\\n\\n // Transfer asset to relayerVault.\\n AssetLogic.handleOutgoingAsset(_relayerFeeAsset, relayerVault, _relayerFee);\\n }\\n\\n emit TransferRelayerFeesIncreased(_transferId, _relayerFee, _relayerFeeAsset, msg.sender);\\n }\\n\\n /**\\n * @notice Holds the logic to recover the signer from an encoded payload.\\n * @dev Will hash and convert to an eth signed message.\\n * @param _signed The hash that was signed.\\n * @param _sig The signature from which we will recover the signer.\\n */\\n function _recoverSignature(bytes32 _signed, bytes calldata _sig) internal pure returns (address) {\\n // Recover\\n return ECDSA.recover(ECDSA.toEthSignedMessageHash(_signed), _sig);\\n }\\n\\n /**\\n * @notice Performs some sanity checks for `execute`.\\n * @dev Need this to prevent stack too deep.\\n * @param _args ExecuteArgs that were passed in to the `execute` call.\\n */\\n function _executeSanityChecks(ExecuteArgs calldata _args) private view returns (bytes32, DestinationTransferStatus) {\\n // If the sender is not approved relayer, revert\\n if (!s.approvedRelayers[msg.sender] && msg.sender != _args.params.delegate) {\\n revert BridgeFacet__execute_unapprovedSender();\\n }\\n\\n // If this is not the destination domain revert\\n if (_args.params.destinationDomain != s.domain) {\\n revert BridgeFacet__execute_wrongDomain();\\n }\\n\\n // Path length refers to the number of facilitating routers. A transfer is considered 'multipath'\\n // if multiple routers provide liquidity (in even 'shares') for it.\\n uint256 pathLength = _args.routers.length;\\n\\n // Derive transfer ID based on given arguments.\\n bytes32 transferId = _calculateTransferId(_args.params);\\n\\n // Retrieve the reconciled record.\\n DestinationTransferStatus status = s.transferStatus[transferId];\\n\\n if (pathLength != 0) {\\n // Make sure number of routers is below the configured maximum.\\n if (pathLength > s.maxRoutersPerTransfer) revert BridgeFacet__execute_maxRoutersExceeded();\\n\\n // Check to make sure the transfer has not been reconciled (no need for routers if the transfer is\\n // already reconciled; i.e. if there are routers provided, the transfer must *not* be reconciled).\\n if (status != DestinationTransferStatus.None) revert BridgeFacet__execute_badFastLiquidityStatus();\\n\\n // NOTE: The sequencer address may be empty and no signature needs to be provided in the case of the\\n // slow liquidity route (i.e. no routers involved). Additionally, the sequencer does not need to be the\\n // msg.sender.\\n // Check to make sure the sequencer address provided is approved\\n if (!s.approvedSequencers[_args.sequencer]) {\\n revert BridgeFacet__execute_notSupportedSequencer();\\n }\\n // Check to make sure the sequencer provided did sign the transfer ID and router path provided.\\n // NOTE: when caps are enforced, this signature also acts as protection from malicious routers looking\\n // to block the network. routers could `execute` a fake transaction, and use up the rest of the `custodied`\\n // bandwidth, causing future `execute`s to fail. this would also cause a break in the accounting, where the\\n // `custodied` balance no longer tracks representation asset minting / burning\\n if (\\n _args.sequencer != _recoverSignature(keccak256(abi.encode(transferId, _args.routers)), _args.sequencerSignature)\\n ) {\\n revert BridgeFacet__execute_invalidSequencerSignature();\\n }\\n\\n // Hash the payload for which each router should have produced a signature.\\n // Each router should have signed the `transferId` (which implicitly signs call params,\\n // amount, and tokenId) as well as the `pathLength`, or the number of routers with which\\n // they are splitting liquidity provision.\\n bytes32 routerHash = keccak256(abi.encode(transferId, pathLength));\\n\\n for (uint256 i; i < pathLength; ) {\\n // Make sure the router is approved, if applicable.\\n // If router ownership is renounced (_RouterOwnershipRenounced() is true), then the router allowlist\\n // no longer applies and we can skip this approval step.\\n if (!_isRouterAllowlistRemoved() && !s.routerConfigs[_args.routers[i]].approved) {\\n revert BridgeFacet__execute_notSupportedRouter();\\n }\\n\\n // Validate the signature. We'll recover the signer's address using the expected payload and basic ECDSA\\n // signature scheme recovery. The address for each signature must match the router's address.\\n if (_args.routers[i] != _recoverSignature(routerHash, _args.routerSignatures[i])) {\\n revert BridgeFacet__execute_invalidRouterSignature();\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n } else {\\n // If there are no routers for this transfer, this `execute` must be a slow liquidity route; in which\\n // case, we must make sure the transfer's been reconciled.\\n if (status != DestinationTransferStatus.Reconciled) revert BridgeFacet__execute_notReconciled();\\n }\\n\\n return (transferId, status);\\n }\\n\\n /**\\n * @notice Calculates fast transfer amount.\\n * @param _amount Transfer amount\\n * @param _numerator Numerator\\n * @param _denominator Denominator\\n */\\n function _muldiv(uint256 _amount, uint256 _numerator, uint256 _denominator) private pure returns (uint256) {\\n return (_amount * _numerator) / _denominator;\\n }\\n\\n /**\\n * @notice Execute liquidity process used when calling `execute`.\\n * @dev Will revert with underflow if any router in the path has insufficient liquidity to provide\\n * for the transfer.\\n * @dev Need this to prevent stack too deep.\\n */\\n function _handleExecuteLiquidity(\\n bytes32 _transferId,\\n bytes32 _key,\\n bool _isFast,\\n ExecuteArgs calldata _args\\n ) private returns (uint256, address, address) {\\n // Save the addresses of all routers providing liquidity for this transfer.\\n s.routedTransfers[_transferId] = _args.routers;\\n\\n // Get the local asset contract address (if applicable).\\n address local;\\n if (_args.params.canonicalDomain != 0) {\\n local = _getLocalAsset(_key, _args.params.canonicalId, _args.params.canonicalDomain);\\n }\\n\\n // If this is a zero-value transfer, short-circuit remaining logic.\\n if (_args.params.bridgedAmt == 0) {\\n return (0, local, local);\\n }\\n\\n // Get the receive local status\\n bool receiveLocal = _args.params.receiveLocal || s.receiveLocalOverride[_transferId];\\n\\n uint256 toSwap = _args.params.bridgedAmt;\\n // If this is a fast liquidity path, we should handle deducting from applicable routers' liquidity.\\n // If this is a slow liquidity path, the transfer must have been reconciled (if we've reached this point),\\n // and the funds would have been custodied in this contract. The exact custodied amount is untracked in state\\n // (since the amount is hashed in the transfer ID itself) - thus, no updates are required.\\n if (_isFast) {\\n uint256 pathLen = _args.routers.length;\\n\\n // Calculate amount that routers will provide with the fast-liquidity fee deducted.\\n toSwap = _muldiv(_args.params.bridgedAmt, s.LIQUIDITY_FEE_NUMERATOR, Constants.BPS_FEE_DENOMINATOR);\\n\\n if (pathLen == 1) {\\n // If router does not have enough liquidity, try to use Aave Portals.\\n // NOTE: Only one router should be responsible for taking on this credit risk, and it should only deal\\n // with transfers expecting adopted assets (to avoid introducing runtime slippage).\\n if (!receiveLocal && s.routerBalances[_args.routers[0]][local] < toSwap && s.aavePool != address(0)) {\\n if (!s.routerConfigs[_args.routers[0]].portalApproved) revert BridgeFacet__execute_notApprovedForPortals();\\n\\n // Portals deliver the adopted asset directly; return after portal execution is completed.\\n (uint256 portalDeliveredAmount, address adoptedAsset) = _executePortalTransfer(\\n _transferId,\\n _key,\\n toSwap,\\n _args.routers[0]\\n );\\n return (portalDeliveredAmount, adoptedAsset, local);\\n } else {\\n // Decrement the router's liquidity.\\n s.routerBalances[_args.routers[0]][local] -= toSwap;\\n }\\n } else {\\n // For each router, assert they are approved, and deduct liquidity.\\n uint256 routerAmount = toSwap / pathLen;\\n for (uint256 i; i < pathLen - 1; ) {\\n // Decrement router's liquidity.\\n // NOTE: If any router in the path has insufficient liquidity, this will revert with an underflow error.\\n s.routerBalances[_args.routers[i]][local] -= routerAmount;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n // The last router in the multipath will sweep the remaining balance to account for remainder dust.\\n uint256 toSweep = routerAmount + (toSwap % pathLen);\\n s.routerBalances[_args.routers[pathLen - 1]][local] -= toSweep;\\n }\\n }\\n\\n // If it is the canonical domain, decrease custodied value\\n if (s.domain == _args.params.canonicalDomain && AssetLogic.getConfig(_key).cap > 0) {\\n // NOTE: safe to use the amount here instead of post-swap because there are no\\n // AMMs on the canonical domain (assuming canonical == adopted on canonical domain)\\n s.tokenConfigs[_key].custodied -= toSwap;\\n }\\n\\n // If the local asset is specified, or the adopted asset was overridden (e.g. when user facing slippage\\n // conditions outside of their boundaries), exit without swapping.\\n if (receiveLocal) {\\n // Delete override\\n delete s.receiveLocalOverride[_transferId];\\n\\n return (toSwap, local, local);\\n }\\n\\n // Swap out of representational asset into adopted asset if needed.\\n uint256 slippageOverride = s.slippage[_transferId];\\n // delete for gas refund\\n delete s.slippage[_transferId];\\n\\n (uint256 amount, address adopted) = AssetLogic.swapFromLocalAssetIfNeeded(\\n _key,\\n local,\\n toSwap,\\n slippageOverride != 0 ? slippageOverride : _args.params.slippage,\\n _args.params.normalizedIn\\n );\\n return (amount, adopted, local);\\n }\\n\\n /**\\n * @notice Process the transfer, and calldata if needed, when calling `execute`\\n * @dev Need this to prevent stack too deep\\n */\\n function _handleExecuteTransaction(\\n ExecuteArgs calldata _args,\\n uint256 _amountOut,\\n address _asset, // adopted (or local if specified)\\n bytes32 _transferId,\\n bool _reconciled\\n ) private returns (uint256) {\\n // transfer funds to recipient\\n AssetLogic.handleOutgoingAsset(_asset, _args.params.to, _amountOut);\\n\\n // execute the calldata\\n _executeCalldata(_transferId, _amountOut, _asset, _reconciled, _args.params);\\n\\n return _amountOut;\\n }\\n\\n /**\\n * @notice Executes external calldata.\\n * \\n * @dev Once a transfer is reconciled (i.e. data is authenticated), external calls will\\n * fail gracefully. This means errors will be emitted in an event, but the function itself\\n * will not revert.\\n\\n * In the case where a transaction is *not* reconciled (i.e. data is unauthenticated), this\\n * external call will fail loudly. This allows all functions that rely on authenticated data\\n * (using a specific check on the origin sender), to be forced into the slow path for\\n * execution to succeed.\\n * \\n */\\n function _executeCalldata(\\n bytes32 _transferId,\\n uint256 _amount,\\n address _asset,\\n bool _reconciled,\\n TransferInfo calldata _params\\n ) internal {\\n // execute the calldata\\n if (keccak256(_params.callData) == Constants.EMPTY_HASH) {\\n // no call data, return amount out\\n return;\\n }\\n\\n (bool success, bytes memory returnData) = ExcessivelySafeCall.excessivelySafeCall(\\n _params.to,\\n gasleft() - Constants.EXECUTE_CALLDATA_RESERVE_GAS,\\n 0, // native asset value (always 0)\\n Constants.DEFAULT_COPY_BYTES, // only copy 256 bytes back as calldata\\n abi.encodeWithSelector(\\n IXReceiver.xReceive.selector,\\n _transferId,\\n _amount,\\n _asset,\\n _reconciled ? _params.originSender : address(0), // use passed in value iff authenticated\\n _params.originDomain,\\n _params.callData\\n )\\n );\\n\\n if (!_reconciled && !success) {\\n // See above devnote, reverts if unsuccessful on fast path\\n revert BridgeFacet__execute_externalCallFailed();\\n }\\n\\n emit ExternalCalldataExecuted(_transferId, success, returnData);\\n }\\n\\n /**\\n * @notice Uses Aave Portals to provide fast liquidity\\n */\\n function _executePortalTransfer(\\n bytes32 _transferId,\\n bytes32 _key,\\n uint256 _fastTransferAmount,\\n address _router\\n ) internal returns (uint256, address) {\\n // Calculate local to adopted swap output if needed\\n address adopted = _getAdoptedAsset(_key);\\n\\n IAavePool(s.aavePool).mintUnbacked(adopted, _fastTransferAmount, address(this), Constants.AAVE_REFERRAL_CODE);\\n\\n // Improvement: Instead of withdrawing to address(this), withdraw directly to the user or executor to save 1 transfer\\n uint256 amountWithdrawn = IAavePool(s.aavePool).withdraw(adopted, _fastTransferAmount, address(this));\\n\\n if (amountWithdrawn < _fastTransferAmount) revert BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn();\\n\\n // Store principle debt\\n s.portalDebt[_transferId] = _fastTransferAmount;\\n\\n // Store fee debt\\n s.portalFeeDebt[_transferId] = (s.aavePortalFeeNumerator * _fastTransferAmount) / Constants.BPS_FEE_DENOMINATOR;\\n\\n emit AavePortalMintUnbacked(_transferId, _router, adopted, _fastTransferAmount);\\n\\n return (_fastTransferAmount, adopted);\\n }\\n\\n // ============ Internal: Send & Emit Xcalled============\\n\\n /**\\n * @notice Format and send transfer message to a remote chain.\\n *\\n * @param _transferId Unique identifier for the transfer.\\n * @param _params The TransferInfo.\\n * @param _connextion The connext instance on the destination domain.\\n * @param _canonical The canonical token ID/domain info.\\n * @param _local The local token address.\\n * @param _amount The token amount.\\n * @param _isCanonical Whether or not the local token is the canonical asset (i.e. this is the token's\\n * \\\"home\\\" chain).\\n */\\n function _sendMessageAndEmit(\\n bytes32 _transferId,\\n TransferInfo memory _params,\\n address _asset,\\n uint256 _amount,\\n bytes32 _connextion,\\n TokenId memory _canonical,\\n address _local,\\n bool _isCanonical\\n ) private {\\n // Remove tokens from circulation on this chain if applicable.\\n uint256 bridgedAmt = _params.bridgedAmt;\\n if (bridgedAmt > 0) {\\n if (!_isCanonical) {\\n // If the token originates on a remote chain, burn the representational tokens on this chain.\\n IBridgeToken(_local).burn(address(this), bridgedAmt);\\n }\\n // IFF the token IS the canonical token (i.e. originates on this chain), we lock the input tokens in escrow\\n // in this contract, as an equal amount of representational assets will be minted on the destination chain.\\n // NOTE: The tokens should be in the contract already at this point from xcall.\\n }\\n\\n bytes memory _messageBody = abi.encodePacked(\\n _canonical.domain,\\n _canonical.id,\\n BridgeMessage.Types.Transfer,\\n bridgedAmt,\\n _transferId\\n );\\n\\n // Send message to destination chain bridge router.\\n // return message hash and unhashed body\\n (bytes32 messageHash, bytes memory messageBody) = IOutbox(s.xAppConnectionManager.home()).dispatch(\\n _params.destinationDomain,\\n _connextion,\\n _messageBody\\n );\\n\\n // emit event\\n emit XCalled(_transferId, _params.nonce, messageHash, _params, _asset, _amount, _local, messageBody);\\n }\\n\\n /**\\n * @notice Assert that the given domain has a xApp Router registered and return its address\\n * @param _domain The domain of the chain for which to get the xApp Router\\n * @return _remote The address of the remote xApp Router on _domain\\n */\\n function _mustHaveRemote(uint32 _domain) internal view returns (bytes32 _remote) {\\n _remote = s.remotes[_domain];\\n if (_remote == bytes32(0)) {\\n revert BridgeFacet__mustHaveRemote_destinationNotSupported();\\n }\\n }\\n}\\n\",\"keccak256\":\"0xeb398efd45b5e2740ab3ac7a679d8215ad476968544b6269525fb051279646f6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IAavePool.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IAavePool {\\n /**\\n * @dev Mints an `amount` of aTokens to the `onBehalfOf`\\n * @param asset The address of the underlying asset to mint\\n * @param amount The amount to mint\\n * @param onBehalfOf The address that will receive the aTokens\\n * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n * 0 if the action is executed directly by the user, without any middle-man\\n **/\\n function mintUnbacked(\\n address asset,\\n uint256 amount,\\n address onBehalfOf,\\n uint16 referralCode\\n ) external;\\n\\n /**\\n * @dev Back the current unbacked underlying with `amount` and pay `fee`.\\n * @param asset The address of the underlying asset to back\\n * @param amount The amount to back\\n * @param fee The amount paid in fees\\n **/\\n function backUnbacked(\\n address asset,\\n uint256 amount,\\n uint256 fee\\n ) external;\\n\\n /**\\n * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n * @param asset The address of the underlying asset to withdraw\\n * @param amount The underlying amount to be withdrawn\\n * - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n * @param to The address that will receive the underlying, same as msg.sender if the user\\n * wants to receive it on his own wallet, or a different address if the beneficiary is a\\n * different wallet\\n * @return The final amount withdrawn\\n **/\\n function withdraw(\\n address asset,\\n uint256 amount,\\n address to\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xd196cc8605b8ecfa5991614f6c234f2bc5d1a605cdb53778e91a93822dfb752f\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n function burn(address _from, uint256 _amnt) external;\\n\\n function mint(address _to, uint256 _amnt) external;\\n\\n function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IXReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IXReceiver {\\n function xReceive(\\n bytes32 _transferId,\\n uint256 _amount,\\n address _asset,\\n address _originSender,\\n uint32 _origin,\\n bytes memory _callData\\n ) external returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x02ae47cb6441eb876b47ff35687ddd9f78eae75399af98815ada1ae618a3945c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/BridgeMessage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary BridgeMessage {\\n // ============ Libraries ============\\n\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // ============ Enums ============\\n\\n // WARNING: do NOT re-write the numbers / order\\n // of message types in an upgrade;\\n // will cause in-flight messages to be mis-interpreted\\n // The Types enum it defines the types of `views` that we use in BridgeMessage. A view\\n // points to a specific part of the memory and can slice bytes out of it. When we give a `type` to a view,\\n // we define the structure of the data it points to, so that we can do easy runtime assertions without\\n // having to fetch the whole data from memory and check for ourselves. In BridgeMessage.sol\\n // the types of `data` we can have are defined in this enum and may belong to different taxonomies.\\n // For example, a `Message` includes a `TokenId` and an Action (a `Transfer`).\\n // The Message is a different TYPE of data than a TokenId or Transfer, as TokenId and Transfer live inside\\n // the message. For that reason, we define them as different data types and we add them to the same enum\\n // for ease of use.\\n enum Types {\\n Invalid, // 0\\n TokenId, // 1\\n Message, // 2\\n Transfer // 3\\n }\\n\\n // ============ Constants ============\\n\\n uint256 private constant TOKEN_ID_LEN = 36; // 4 bytes domain + 32 bytes id\\n uint256 private constant IDENTIFIER_LEN = 1;\\n uint256 private constant TRANSFER_LEN = 65; // 1 byte identifier + 32 bytes amount + 32 bytes transfer id\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Asserts a message is of type `_t`\\n * @param _view The message\\n * @param _t The expected type\\n */\\n modifier typeAssert(bytes29 _view, Types _t) {\\n _view.assertType(uint40(_t));\\n _;\\n }\\n\\n // ============ Internal Functions ============\\n\\n /**\\n * @notice Checks that Action is valid type\\n * @param _action The action\\n * @return TRUE if action is valid\\n */\\n function isValidAction(bytes29 _action) internal pure returns (bool) {\\n return isTransfer(_action);\\n }\\n\\n /**\\n * @notice Checks that view is a valid message length\\n * @param _view The bytes string\\n * @return TRUE if message is valid\\n */\\n function isValidMessageLength(bytes29 _view) internal pure returns (bool) {\\n uint256 _len = _view.len();\\n return _len == TOKEN_ID_LEN + TRANSFER_LEN;\\n }\\n\\n /**\\n * @notice Formats an action message\\n * @param _tokenId The token ID\\n * @param _action The action\\n * @return The formatted message\\n */\\n function formatMessage(bytes29 _tokenId, bytes29 _action)\\n internal\\n view\\n typeAssert(_tokenId, Types.TokenId)\\n returns (bytes memory)\\n {\\n require(isValidAction(_action), \\\"!action\\\");\\n bytes29[] memory _views = new bytes29[](2);\\n _views[0] = _tokenId;\\n _views[1] = _action;\\n return TypedMemView.join(_views);\\n }\\n\\n /**\\n * @notice Returns the type of the message\\n * @param _view The message\\n * @return The type of the message\\n */\\n function messageType(bytes29 _view) internal pure returns (Types) {\\n return Types(uint8(_view.typeOf()));\\n }\\n\\n /**\\n * @notice Checks that the message is of the specified type\\n * @param _type the type to check for\\n * @param _action The message\\n * @return True if the message is of the specified type\\n */\\n function isType(bytes29 _action, Types _type) internal pure returns (bool) {\\n return actionType(_action) == uint8(_type) && messageType(_action) == _type;\\n }\\n\\n /**\\n * @notice Checks that the message is of type Transfer\\n * @param _action The message\\n * @return True if the message is of type Transfer\\n */\\n function isTransfer(bytes29 _action) internal pure returns (bool) {\\n return isType(_action, Types.Transfer);\\n }\\n\\n /**\\n * @notice Formats Transfer\\n * @param _amnt The transfer amount\\n * @param _transferId The unique identifier of the transfer\\n * @return\\n */\\n function formatTransfer(uint256 _amnt, bytes32 _transferId) internal pure returns (bytes29) {\\n return abi.encodePacked(Types.Transfer, _amnt, _transferId).ref(uint40(Types.Transfer));\\n }\\n\\n /**\\n * @notice Serializes a Token ID struct\\n * @param _tokenId The token id struct\\n * @return The formatted Token ID\\n */\\n function formatTokenId(TokenId memory _tokenId) internal pure returns (bytes29) {\\n return formatTokenId(_tokenId.domain, _tokenId.id);\\n }\\n\\n /**\\n * @notice Creates a serialized Token ID from components\\n * @param _domain The domain\\n * @param _id The ID\\n * @return The formatted Token ID\\n */\\n function formatTokenId(uint32 _domain, bytes32 _id) internal pure returns (bytes29) {\\n return abi.encodePacked(_domain, _id).ref(uint40(Types.TokenId));\\n }\\n\\n /**\\n * @notice Retrieves the domain from a TokenID\\n * @param _tokenId The message\\n * @return The domain\\n */\\n function domain(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (uint32) {\\n return uint32(_tokenId.indexUint(0, 4));\\n }\\n\\n /**\\n * @notice Retrieves the ID from a TokenID\\n * @param _tokenId The message\\n * @return The ID\\n */\\n function id(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (bytes32) {\\n // before = 4 bytes domain\\n return _tokenId.index(4, 32);\\n }\\n\\n /**\\n * @notice Retrieves the EVM ID\\n * @param _tokenId The message\\n * @return The EVM ID\\n */\\n function evmId(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (address) {\\n // before = 4 bytes domain + 12 bytes empty to trim for address\\n return _tokenId.indexAddress(16);\\n }\\n\\n /**\\n * @notice Retrieves the action identifier from message\\n * @param _message The action\\n * @return The message type\\n */\\n function msgType(bytes29 _message) internal pure returns (uint8) {\\n return uint8(_message.indexUint(TOKEN_ID_LEN, 1));\\n }\\n\\n /**\\n * @notice Retrieves the identifier from action\\n * @param _action The action\\n * @return The action type\\n */\\n function actionType(bytes29 _action) internal pure returns (uint8) {\\n return uint8(_action.indexUint(0, 1));\\n }\\n\\n /**\\n * @notice Retrieves the amount from a Transfer\\n * @param _transferAction The message\\n * @return The amount\\n */\\n function amnt(bytes29 _transferAction) internal pure returns (uint256) {\\n // before = 1 byte identifier = 1 bytes\\n return _transferAction.indexUint(1, 32);\\n }\\n\\n /**\\n * @notice Retrieves the transfer id from a Transfer\\n * @param _transferAction The message\\n * @return The id\\n */\\n function transferId(bytes29 _transferAction) internal pure returns (bytes32) {\\n // before = 1 byte identifier + 32 bytes amount = 33 bytes\\n return _transferAction.index(33, 32);\\n }\\n\\n /**\\n * @notice Retrieves the token ID from a Message\\n * @param _message The message\\n * @return The ID\\n */\\n function tokenId(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n return _message.slice(0, TOKEN_ID_LEN, uint40(Types.TokenId));\\n }\\n\\n /**\\n * @notice Retrieves the action data from a Message\\n * @param _message The message\\n * @return The action\\n */\\n function action(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n uint256 _actionLen = _message.len() - TOKEN_ID_LEN;\\n uint40 _type = uint40(msgType(_message));\\n return _message.slice(TOKEN_ID_LEN, _actionLen, _type);\\n }\\n\\n /**\\n * @notice Converts to a Message\\n * @param _message The message\\n * @return The newly typed message\\n */\\n function tryAsMessage(bytes29 _message) internal pure returns (bytes29) {\\n if (isValidMessageLength(_message)) {\\n return _message.castTo(uint40(Types.Message));\\n }\\n return TypedMemView.nullView();\\n }\\n\\n /**\\n * @notice Asserts that the message is of type Message\\n * @param _view The message\\n * @return The message\\n */\\n function mustBeMessage(bytes29 _view) internal pure returns (bytes29) {\\n return tryAsMessage(_view).assertValid();\\n }\\n}\\n\",\"keccak256\":\"0x18f34053f524fbed1c307c08e863d015b96dade86249276eb05fbd5b8ac86a6b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n /// @notice Use when you _really_ really _really_ don't trust the called\\n /// contract. This prevents the called contract from causing reversion of\\n /// the caller in as many ways as we can.\\n /// @dev The main difference between this and a solidity low-level call is\\n /// that we limit the number of bytes that the callee can cause to be\\n /// copied to caller memory. This prevents stupid things like malicious\\n /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n /// to memory.\\n /// @param _target The address to call\\n /// @param _gas The amount of gas to forward to the remote contract\\n /// @param _value The value in wei to send to the remote contract\\n /// @param _maxCopy The maximum number of bytes of returndata to copy\\n /// to memory.\\n /// @param _calldata The data to send to the remote contract\\n /// @return success and returndata, as `.call()`. Returndata is capped to\\n /// `_maxCopy` bytes.\\n function excessivelySafeCall(\\n address _target,\\n uint256 _gas,\\n uint256 _value,\\n uint16 _maxCopy,\\n bytes memory _calldata\\n ) internal returns (bool, bytes memory) {\\n // set up for assembly call\\n uint256 _toCopy;\\n bool _success;\\n bytes memory _returnData = new bytes(_maxCopy);\\n // dispatch message to recipient\\n // by assembly calling \\\"handle\\\" function\\n // we call via assembly to avoid memcopying a very large returndata\\n // returned by a malicious contract\\n assembly {\\n _success := call(\\n _gas, // gas\\n _target, // recipient\\n _value, // ether value\\n add(_calldata, 0x20), // inloc\\n mload(_calldata), // inlen\\n 0, // outloc\\n 0 // outlen\\n )\\n // limit our copy to 256 bytes\\n _toCopy := returndatasize()\\n if gt(_toCopy, _maxCopy) {\\n _toCopy := _maxCopy\\n }\\n // Store the length of the copied bytes\\n mstore(_returnData, _toCopy)\\n // copy the bytes from returndata[0:_toCopy]\\n returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n }\\n return (_success, _returnData);\\n }\\n\\n /// @notice Use when you _really_ really _really_ don't trust the called\\n /// contract. This prevents the called contract from causing reversion of\\n /// the caller in as many ways as we can.\\n /// @dev The main difference between this and a solidity low-level call is\\n /// that we limit the number of bytes that the callee can cause to be\\n /// copied to caller memory. This prevents stupid things like malicious\\n /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n /// to memory.\\n /// @param _target The address to call\\n /// @param _gas The amount of gas to forward to the remote contract\\n /// @param _maxCopy The maximum number of bytes of returndata to copy\\n /// to memory.\\n /// @param _calldata The data to send to the remote contract\\n /// @return success and returndata, as `.call()`. Returndata is capped to\\n /// `_maxCopy` bytes.\\n function excessivelySafeStaticCall(\\n address _target,\\n uint256 _gas,\\n uint16 _maxCopy,\\n bytes memory _calldata\\n ) internal view returns (bool, bytes memory) {\\n // set up for assembly call\\n uint256 _toCopy;\\n bool _success;\\n bytes memory _returnData = new bytes(_maxCopy);\\n // dispatch message to recipient\\n // by assembly calling \\\"handle\\\" function\\n // we call via assembly to avoid memcopying a very large returndata\\n // returned by a malicious contract\\n assembly {\\n _success := staticcall(\\n _gas, // gas\\n _target, // recipient\\n add(_calldata, 0x20), // inloc\\n mload(_calldata), // inlen\\n 0, // outloc\\n 0 // outlen\\n )\\n // limit our copy to 256 bytes\\n _toCopy := returndatasize()\\n if gt(_toCopy, _maxCopy) {\\n _toCopy := _maxCopy\\n }\\n // Store the length of the copied bytes\\n mstore(_returnData, _toCopy)\\n // copy the bytes from returndata[0:_toCopy]\\n returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n }\\n return (_success, _returnData);\\n }\\n\\n /**\\n * @notice Swaps function selectors in encoded contract calls\\n * @dev Allows reuse of encoded calldata for functions with identical\\n * argument types but different names. It simply swaps out the first 4 bytes\\n * for the new selector. This function modifies memory in place, and should\\n * only be used with caution.\\n * @param _newSelector The new 4-byte selector\\n * @param _buf The encoded contract args\\n */\\n function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n require(_buf.length > 4 - 1);\\n uint256 _mask = LOW_28_MASK;\\n assembly {\\n // load the first word of\\n let _word := mload(add(_buf, 0x20))\\n // mask out the top 4 bytes\\n // /x\\n _word := and(_word, _mask)\\n _word := or(_newSelector, _word)\\n mstore(add(_buf, 0x20), _word)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615188806100206000396000f3fe60806040526004361061011f5760003560e01c80636989ca7c116100a0578063affed0e011610064578063affed0e01461033e578063b49c53a714610353578063bfd7903014610373578063c2fb26a6146103b0578063cb8058ba146103d557600080fd5b80636989ca7c146102b85780638a336231146102d85780638aac16ba146102f857806391f5de791461030b57806393f18ac51461031e57600080fd5b806341bdc8b5116100e757806341bdc8b51461020a578063541267111461022a57806359efa1621461024a57806363e3e7d21461026a578063674dc9331461029857600080fd5b8063121cca3114610124578063159e041f146101615780631a8bc0e1146101aa5780632424401f146101d75780633339df96146101ec575b600080fd5b34801561013057600080fd5b5061014461013f3660046141b4565b6103f5565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016d57600080fd5b5061019a61017c3660046141f1565b6001600160a01b03166000908152601f602052604090205460ff1690565b6040519015158152602001610158565b3480156101b657600080fd5b506101ca6101c536600461420e565b610412565b6040516101589190614227565b6101ea6101e536600461420e565b61047e565b005b3480156101f857600080fd5b506020546001600160a01b0316610144565b34801561021657600080fd5b506101ea6102253660046141f1565b6104e6565b34801561023657600080fd5b506101ea61024536600461428d565b610643565b34801561025657600080fd5b506101ea6102653660046142d1565b610745565b34801561027657600080fd5b5061028a610285366004614309565b6107da565b604051908152602001610158565b3480156102a457600080fd5b5061028a6102b3366004614384565b610999565b3480156102c457600080fd5b506101ea6102d33660046141f1565b610ac1565b3480156102e457600080fd5b506101ea6102f33660046141f1565b610bb9565b61028a61030636600461442d565b610cd5565b61028a61031936600461442d565b610dfa565b34801561032a57600080fd5b5061028a610339366004614384565b610f0c565b34801561034a57600080fd5b5060035461028a565b34801561035f57600080fd5b506101ea61036e3660046144cd565b611020565b34801561037f57600080fd5b506103a361038e36600461420e565b60009081526008602052604090205460ff1690565b604051610158919061452d565b3480156103bc57600080fd5b5060045460405163ffffffff9091168152602001610158565b3480156103e157600080fd5b506101ea6103f0366004614540565b61113e565b63ffffffff81166000908152600f60205260408120545b92915050565b60008181526009602090815260409182902080548351818402810184019094528084526060939283018282801561047257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610454575b50505050509050919050565b601654600119016104a257604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156104d257604051633ee5b89360e01b815260040160405180910390fd5b6104de8160003461120b565b506001601655565b336104ef6112d2565b6001600160a01b03161415801561052a575060033360009081526014602052604090205460ff166003811115610527576105276144f9565b14155b1561054857604051637b32c26b60e01b815260040160405180910390fd5b600480546040805163234d8e3d60e21b81529051849363ffffffff909316926001600160a01b03851692638d3638f492818301926020928290030181865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190614574565b63ffffffff16146105df57604051621ff66160e61b815260040160405180910390fd5b604080516001600160a01b03841681523360208201527fd6e53d12bb441b2201be4949c7f431b383623888df2abfeef43aaaf272802d50910160405180910390a1602080546001600160a01b0319166001600160a01b039290921691909117905550565b813361065560a08301608084016141f1565b6001600160a01b03161461067c5760405163e3613aff60e01b815260040160405180910390fd5b61271082111561069f57604051633345cd4360e11b815260040160405180910390fd5b60045463ffffffff166106b860408501602086016141b4565b63ffffffff16146106dc57604051632a8e462760e01b815260040160405180910390fd5b60006106ef6106ea85614696565b611300565b6000818152600d6020526040908190208590555190915081907fb243c3cea6cd1bbfd64d5d0765f13734ca7b87fdf14e017391fe12a8891434ca906107379086815260200190565b60405180910390a250505050565b6016546001190161076957604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561079957604051633ee5b89360e01b815260040160405180910390fd5b806000036107ba576040516348e7dc3f60e01b815260040160405180910390fd5b6107c382611330565b50506107d083838361120b565b5050600160165550565b6016546000906001190161080157604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561083157604051633ee5b89360e01b815260040160405180910390fd5b60008061083d846113a6565b909250905060006001826003811115610858576108586144f9565b14610864576002610867565b60035b60008481526008602052604090208054919250829160ff19166001836003811115610894576108946144f9565b0217905550600080806108ef866108d36108ae8b8061478b565b61018001356108bd8c8061478b565b6108ce9060608101906040016141b4565b611767565b60038760038111156108e7576108e76144f9565b14158b6117a9565b9194509250905060006109198985858a60038a6003811115610913576109136144f9565b14611d36565b90506001600160a01b03831661092f8a8061478b565b6109409060808101906060016141f1565b6001600160a01b0316887f0b07a8b0b083f8976b3c832b720632f49cb8ba1e7a99e1b145f51a47d3391cb78c86863360405161097f9493929190614908565b60405180910390a450506001601655509295945050505050565b601754600090600119016109c0576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528c1660208083019190915260008284018190526001600160a01b03808e1660608501528b166080840152600160a08401528351601f88018390048302810183019094528684529260c08301918890889081908401838280828437600092018290525093855250505060208083018a905233604080850191909152606084018390526080840183905260a0840183905260c090930191909152815180830183526001600160a01b038d168082528183018c905283518085019094528352908201869052919250610aad918391611d7f565b60016017559b9a5050505050505050505050565b33610aca6112d2565b6001600160a01b031614158015610b05575060033360009081526014602052604090205460ff166003811115610b0257610b026144f9565b14155b15610b2357604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff16610b5c57604051637840a40d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19169055815192835233908301527f4860b0a180d4b5969c2757493a999f05d0b22318320f154a02170aa239e24b1391015b60405180910390a150565b33610bc26112d2565b6001600160a01b031614158015610bfd575060033360009081526014602052604090205460ff166003811115610bfa57610bfa6144f9565b14155b15610c1b57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116610c42576040516332f9c08d60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff1615610c7c5760405163e2a4506360e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19166001179055815192835233908301527f3860a100215fe93b6b95ed1ae0870e538f85a73b30d073f63fefc60e08b0c1249101610bae565b60175460009060011901610cfc576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a16608084015260a083018190528351601f87018390048302810183019094528584529260c083019187908790819084018382808284376000920182905250938552505050602080830189905233604080850191909152606084018390526080840183905260a0840183905260c0909301829052825180840184526001600160a01b038d1681528082018b905283518085019094529183523490830152919250610de7918391611d7f565b60016017559a9950505050505050505050565b60175460009060011901610e21576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a166080840152600160a08401528351601f87018390048302810183019094528584529260c083019187908790819084018382808284376000920182905250938552505050602080830189905233604080850191909152606084018390526080840183905260a0840183905260c0909301829052825180840184526001600160a01b038d1681528082018b905283518085019094529183523490830152919250610de7918391611d7f565b60175460009060011901610f33576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528c1660208083019190915260008284018190526001600160a01b03808e1660608501528b16608084015260a083018190528351601f88018390048302810183019094528684529260c08301918890889081908401838280828437600092018290525093855250505060208083018a905233604080850191909152606084018390526080840183905260a0840183905260c090930191909152815180830183526001600160a01b038d168082528183018c905283518085019094528352908201869052919250610aad918391611d7f565b336110296112d2565b6001600160a01b031614158015611064575060033360009081526014602052604090205460ff166003811115611061576110616144f9565b14155b1561108257604051637b32c26b60e01b815260040160405180910390fd5b806110a057604051633bca644d60e11b815260040160405180910390fd5b63ffffffff821615806110bd575060045463ffffffff8381169116145b156110db57604051632892757b60e21b815260040160405180910390fd5b63ffffffff82166000818152600f602090815260409182902084905581519283526001600160a01b038416908301523382820152517fb07f562723347d6ea7f9f37b3b31f96b65104c3339d1c89e1b6fa88e2410b85c9181900360600190a15050565b803361115060a08301608084016141f1565b6001600160a01b0316146111775760405163e3613aff60e01b815260040160405180910390fd5b60045463ffffffff1661119060408401602085016141b4565b63ffffffff16146111b457604051630ada556f60e31b815260040160405180910390fd5b60006111c26106ea84614696565b6000818152600e6020526040808220805460ff191660011790555191925082917f2510041334ede909998b9aefcca4300fc36c670dd00e1f7f0afffaca56adcb399190a2505050565b6002546001600160a01b03168061123557604051630bd7619560e41b815260040160405180910390fd5b6001600160a01b0383166112735734600003611264576040516348e7dc3f60e01b815260040160405180910390fd5b61126e818361205b565b611288565b61127d838361217e565b6112888382846122cf565b604080518381526001600160a01b0385166020820152339181019190915284907ff90d3aafcedf55a0da208dd26d915e0ce1870ee9221586012487a0b366106f6590606001610737565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6000816040516020016113139190614c82565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201526000806113508461230e565b9050600061136682602001518360000151611767565b90506113718161232d565b60020154600160a01b900460ff1661139c5760405163a13f958f60e01b815260040160405180910390fd5b9094909350915050565b336000908152600b6020526040812054819060ff161580156113f457506113cd838061478b565b6113de9060a08101906080016141f1565b6001600160a01b0316336001600160a01b031614155b1561141257604051637c32a2b360e01b815260040160405180910390fd5b60045463ffffffff16611425848061478b565b6114369060408101906020016141b4565b63ffffffff161461145a5760405163b6bb322560e01b815260040160405180910390fd5b60006114696020850185614c95565b91506000905061148561147c868061478b565b6106ea90614696565b60008181526008602052604090205490915060ff16821561172a57600c548311156114c3576040516313c06ef360e01b815260040160405180910390fd5b60008160038111156114d7576114d76144f9565b146114f557604051630caaeb0b60e11b815260040160405180910390fd5b601f60006115096080890160608a016141f1565b6001600160a01b0316815260208101919091526040016000205460ff1661154357604051631fa09b5360e31b815260040160405180910390fd5b611590826115546020890189614c95565b60405160200161156693929190614cde565b60408051601f19818403018152919052805160209091012061158b6080890189614cf8565b61236e565b6001600160a01b03166115a960808801606089016141f1565b6001600160a01b0316146115d057604051638579eca560e01b815260040160405180910390fd5b6040805160208082018590528183018690528251808303840181526060909201909252805191012060005b848110156117235761160b6123c0565b15801561166857506015600061162460208b018b614c95565b8481811061163457611634614d3e565b905060200201602081019061164991906141f1565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561168657604051630e1eb7f760e31b815260040160405180910390fd5b6116b98261169760408b018b614c95565b848181106116a7576116a7614d3e565b905060200281019061158b9190614cf8565b6001600160a01b03166116cf60208a018a614c95565b838181106116df576116df614d3e565b90506020020160208101906116f491906141f1565b6001600160a01b03161461171b57604051633a1dd23360e21b815260040160405180910390fd5b6001016115fb565b505061175c565b600181600381111561173e5761173e6144f9565b1461175c57604051636320d2cf60e11b815260040160405180910390fd5b909590945092505050565b6000828260405160200161178b92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080806117ba6020850185614c95565b60008981526009602052604090206117d392909161411f565b5060006117e0858061478b565b6117f19060608101906040016141b4565b63ffffffff16156118325761182f8761180a878061478b565b6101800135611819888061478b565b61182a9060608101906040016141b4565b6123e7565b90505b61183c858061478b565b610120013560000361185657600093509150819050611d2c565b6000611862868061478b565b6118739060c081019060a001614d54565b8061188c57506000898152600e602052604090205460ff165b9050600061189a878061478b565b610120013590508715611c3a5760006118b66020890189614c95565b91506118da90506118c7898061478b565b61012001356000600101546127106123f6565b915080600103611acb5782158015611951575081600a60006118ff60208c018c614c95565b600081811061191057611910614d3e565b905060200201602081019061192591906141f1565b6001600160a01b0390811682526020808301939093526040918201600090812091891681529252902054105b80156119675750601b546001600160a01b031615155b15611a36576015600061197d60208b018b614c95565b600081811061198e5761198e614d3e565b90506020020160208101906119a391906141f1565b6001600160a01b03168152602081019190915260400160002054610100900460ff166119e2576040516310c4e50960e01b815260040160405180910390fd5b600080611a238d8d866119f860208f018f614c95565b6000818110611a0957611a09614d3e565b9050602002016020810190611a1e91906141f1565b61240d565b9099509750949550611d2c945050505050565b81600a6000611a4860208c018c614c95565b6000818110611a5957611a59614d3e565b9050602002016020810190611a6e91906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000206000828254611ac09190614d87565b90915550611c389050565b6000611ad78284614db0565b905060005b611ae7600184614d87565b811015611b845781600a6000611b0060208e018e614c95565b85818110611b1057611b10614d3e565b9050602002016020810190611b2591906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611b779190614d87565b9091555050600101611adc565b506000611b918385614dc4565b611b9b9083614dd8565b905080600a6000611baf60208e018e614c95565b611bba600189614d87565b818110611bc957611bc9614d3e565b9050602002016020810190611bde91906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611c309190614d87565b909155505050505b505b611c44878061478b565b611c559060608101906040016141b4565b60045463ffffffff9081169116148015611c7b57506000611c758a61232d565b60030154115b15611ca75760008981526007602052604081206004018054839290611ca1908490614d87565b90915550505b8115611cd25760008a8152600e60205260409020805460ff191690559450909250829150611d2c9050565b60008a8152600d602052604081208054908290559080611d1e8c8786868503611d0857611cff8e8061478b565b60e00135611d0a565b865b611d148f8061478b565b61014001356125cc565b909950975094955050505050505b9450945094915050565b6000611d5d84611d46888061478b565b611d579060808101906060016141f1565b876122cf565b611d7383868685611d6e8b8061478b565b612651565b50835b95945050505050565b601a54600090600160a01b900460ff1615611dad57604051633ee5b89360e01b815260040160405180910390fd5b82516000906001600160a01b0316158015611dcb5750602084015115155b15611de95760405163ae715ad360e01b815260040160405180910390fd5b611df685602001516127c5565b60608601519091506001600160a01b0316611e235760405162845fdd60e41b815260040160405180910390fd5b6127108560e001511115611e4a5760405163388d723160e11b815260040160405180910390fd5b6040805180820190915260008082526020820181905290819086516000906001600160a01b031615611ff1576000611e858960000151611330565b90935090506000611e958261232d565b84518c5163ffffffff9081169116149350905082611ebd5780546001600160a01b0316611ec3565b60208401515b95506001600160a01b038616611eec5760405163965a46c160e01b815260040160405180910390fd5b6003810154838015611efe5750600081115b15611f4f5760008b602001518360040154611f199190614dd8565b905081811115611f3c576040516348ba8bf160e01b815260040160405180910390fd5b6000848152600760205260409020600401555b50835163ffffffff1660408c01526020808501516101808d01528a015115611fee57611f838a600001518b6020015161217e565b611f9c828b60000151888d602001518f60e001516127fe565b6101208c01528951611fe7906001600160a01b03888116911614611fce576001820154600160a01b900460ff16611fdb565b8154600160a01b900460ff165b60128c60200151612881565b6101408c01525b50505b6003805490600061200183614deb565b909155506101608a015261201489611300565b60208801519093501561203457612034838860000151896020015161120b565b61204c838a8a600001518b6020015189878a886128ec565b509093505050505b9392505050565b804710156120b05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146120fd576040519150601f19603f3d011682016040523d82523d6000602084013e612102565b606091505b50509050806121795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016120a7565b505050565b8060000361218a575050565b6001600160a01b0382166121b157604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156121fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221e9190614e04565b90506122356001600160a01b038316333086612ad3565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa15801561227d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a19190614e04565b6122ab9190614d87565b146122c957604051630e40773560e21b815260040160405180910390fd5b50505050565b806000036122dc57505050565b6001600160a01b03831661230357604051633a48ca7b60e11b815260040160405180910390fd5b612179838383612b3e565b604080518082019091526000808252602082015261040c826000612b6e565b6000818152600760205260408120600180820154839291600160a01b90910460ff1610156120545760405163618cca3f60e11b815260040160405180910390fd5b60006123b861237c85612c66565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ca192505050565b949350505050565b6000806123cb6112d2565b6001600160a01b031614806123e2575060125460ff165b905090565b60006123b88484846000612cc5565b6000816124038486614e1d565b6123b89190614db0565b600080600061241b86612d00565b601b546040516369a933a560e01b81526001600160a01b03808416600483015260248201899052306044830152600060648301529293509116906369a933a590608401600060405180830381600087803b15801561247857600080fd5b505af115801561248c573d6000803e3d6000fd5b5050601b54604051631a4ca37b60e21b81526001600160a01b038581166004830152602482018a90523060448301526000945090911691506369328dec906064016020604051808303816000875af11580156124ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125109190614e04565b9050858110156125335760405163407559a360e11b815260040160405180910390fd5b6000888152601d60205260409020869055601c5461271090612556908890614e1d565b6125609190614db0565b6000898152601e60209081526040918290209290925580516001600160a01b038581168252928101899052918716918a917f2d3ba0fa5be2ef8cb1ec8920a07a6cbccc2397b18ca3e70f48ea695500b8f218910160405180910390a35084925090505b94509492505050565b60008060006125da8861232d565b60018101549091506001600160a01b0390811690881681036126025786935091506126479050565b866000036126165786935091506126479050565b6126408989838a61263b60128860010160149054906101000a900460ff168c8e612d39565b612d85565b9350935050505b9550959350505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061267f60c0830183614cf8565b60405161268d929190614e34565b604051809103902003156127be576000806127546126b160808501606086016141f1565b6127105a6126bf9190614d87565b600061010063fd614f4160e01b8c8c8c8c6126db5760006126ed565b6126ed6101208d016101008e016141f1565b6126fa60208e018e6141b4565b61270760c08f018f614cf8565b60405160240161271d9796959493929190614e44565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ec4565b9150915083158015612764575081155b15612781576040516264cdd360e41b815260040160405180910390fd5b867fb1a4ab59facaedd6d3a71da3902e0a1fa5b99750c0e20cd878334378a41cb33583836040516127b3929190614e97565b60405180910390a250505b5050505050565b63ffffffff81166000908152600f6020526040902054806127f957604051630c3bcd4960e41b815260040160405180910390fd5b919050565b60008260000361281057506000611d76565b846001600160a01b0316846001600160a01b031603612830575081611d76565b600061283b8761232d565b905060006128748888888861263b8760010160149054906101000a900460ff168860000160149054906101000a900460ff168c8c612d39565b5098975050505050505050565b60008260ff168460ff1603612897575080612054565b60008360ff168560ff1610156128cd576128b18585614eb2565b6128bc90600a614faf565b6128c69084614e1d565b90506123b8565b6128d78486614eb2565b6128e290600a614faf565b611d769084614db0565b610120870151801561295e578161295e57604051632770a7eb60e21b8152306004820152602481018290526001600160a01b03841690639dc29fac90604401600060405180830381600087803b15801561294557600080fd5b505af1158015612959573d6000803e3d6000fd5b505050505b6000846000015185602001516003848d604051602001612982959493929190614fbe565b60408051601f1981840301815282825260208054639fa92f9d60e01b8552925191945060009384936001600160a01b031692639fa92f9d926004808401939192918290030181865afa1580156129dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a009190614ffd565b6001600160a01b031663fa31de018c602001518a866040518463ffffffff1660e01b8152600401612a339392919061501a565b6000604051808303816000875af1158015612a52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a7a919081019061503f565b91509150818b61016001518d7fed8e6ba697dd65259e5ce532ac08ff06d1a3607bcec58f8f0937fe36a5666c548e8e8e8c88604051612abd9594939291906150c1565b60405180910390a4505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526122c99085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f4e565b6040516001600160a01b03831660248201526044810182905261217990849063a9059cbb60e01b90606401612b07565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b038416612bab57905061040c565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215612bf657905061040c565b612c008484613020565b15612c2657600483015463ffffffff1681526001600160a01b0384166020820152612054565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01611313565b6000806000612cb0858561305f565b91509150612cbd816130a4565b509392505050565b600481015460009063ffffffff90811690841603612ce45750826123b8565b612ced8561232d565b546001600160a01b031695945050505050565b600080612d0c8361232d565b600101546001600160a01b031690508061040c57604051630558a50760e31b815260040160405180910390fd5b600082600003612d4b575060006123b8565b6000612710612d5a8482614d87565b612d649086614e1d565b612d6e9190614db0565b9050612d7b868683612881565b9695505050505050565b600085815260186020526040812081908190612da0816131f1565b15612dd257612dc6612db28a8a61320e565b612dbc8b8a61320e565b839190898961328e565b87935093505050612647565b6000612ddd8a61232d565b600201546001600160a01b0390811691508990612dfe908216836000613597565b612e126001600160a01b038216838a6136ac565b6001600160a01b03821663d460f0a2898c8c8b612e31610e1042614dd8565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af1158015612e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb69190614e04565b899550955050505050612647565b6000606060008060008661ffff166001600160401b03811115612ee957612ee9614591565b6040519080825280601f01601f191660200182016040528015612f13576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612f34578692505b828152826000602083013e90999098509650505050505050565b6000612fa3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661375e9092919063ffffffff16565b8051909150156121795780806020019051810190612fc19190615110565b6121795760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016120a7565b6001600160a01b038216600090815260068201602052604081205463ffffffff161561304e5750600061040c565b50506001600160a01b03163b151590565b60008082516041036130955760208301516040840151606085015160001a6130898782858561376d565b9450945050505061309d565b506000905060025b9250929050565b60008160048111156130b8576130b86144f9565b036130c05750565b60018160048111156130d4576130d46144f9565b036131215760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016120a7565b6002816004811115613135576131356144f9565b036131825760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016120a7565b6003816004811115613196576131966144f9565b036131ee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016120a7565b50565b600c81015460009060ff1615801561040c57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff169291908390811061325b5761325b614d3e565b6000918252602090912001546001600160a01b0316146123b85760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff16156132d65760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b60448201526064016120a7565b85600a018560ff16815481106132ee576132ee614d3e565b90600052602060002001548311156133415760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b60448201526064016120a7565b600080600088600a0180548060200260200160405190810160405280929190818152602001828054801561339457602002820191906000526020600020905b815481526020019060010190808311613380575b505050505090506133a8898989898561382e565b9093509150848310156133ea5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b60448201526064016120a7565b6000896009018860ff168154811061340457613404614d3e565b90600052602060002001546402540be4008b60060154856134259190614e1d565b61342f9190614db0565b6134399190614db0565b905086828a60ff168151811061345157613451614d3e565b60200260200101516134639190614dd8565b8a600a018a60ff168154811061347b5761347b614d3e565b90600052602060002001819055508084838a60ff16815181106134a0576134a0614d3e565b60200260200101516134b29190614d87565b6134bc9190614d87565b8a600a018960ff16815481106134d4576134d4614d3e565b600091825260209091200155801561353957808a600b018960ff16815481106134ff576134ff614d3e565b90600052602060002001546135149190614dd8565b8a600b018960ff168154811061352c5761352c614d3e565b6000918252602090912001555b8954604080518981526020810187905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b8015806136115750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f9190614e04565b155b61367c5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016120a7565b6040516001600160a01b03831660248201526044810182905261217990849063095ea7b360e01b90606401612b07565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156136fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137219190614e04565b61372b9190614dd8565b6040516001600160a01b0385166024820152604481018290529091506122c990859063095ea7b360e01b90606401612b07565b60606123b884846000856139f4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156137a457506000905060036125c3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156137f8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613821576000600192509250506125c3565b9660009650945050505050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561388157602002820191906000526020600020905b81548152602001906001019080831161386d575b5050505050905060006138948583613acf565b905080518860ff161080156138ac575080518760ff16105b6138ed5760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b60448201526064016120a7565b6000818960ff168151811061390457613904614d3e565b6020026020010151838a60ff168151811061392157613921614d3e565b6020026020010151886139349190614e1d565b61393e9190614dd8565b9050600061395761394e8c613bd9565b8b8b8587613be4565b9050600181848b60ff168151811061397157613971614d3e565b60200260200101516139839190614d87565b61398d9190614d87565b95506402540be4008b60050154876139a59190614e1d565b6139af9190614db0565b9450838960ff16815181106139c6576139c6614d3e565b602002602001015185876139da9190614d87565b6139e49190614db0565b9550505050509550959350505050565b606082471015613a555760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016120a7565b600080866001600160a01b03168587604051613a71919061512d565b60006040518083038185875af1925050503d8060008114613aae576040519150601f19603f3d011682016040523d82523d6000602084013e613ab3565b606091505b5091509150613ac487838387613e4b565b979650505050505050565b81518151606091908114613b1c5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b60448201526064016120a7565b6000816001600160401b03811115613b3657613b36614591565b604051908082528060200260200182016040528015613b5f578160200160208202803683370190505b50905060005b82811015613bd057848181518110613b7f57613b7f614d3e565b6020026020010151868281518110613b9957613b99614d3e565b6020026020010151613bab9190614e1d565b828281518110613bbd57613bbd614d3e565b6020908102919091010152600101613b65565b50949350505050565b600061040c82613ec4565b805160009060ff80861690871603613c3e5760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c6600000000000000000060448201526064016120a7565b808660ff16108015613c525750808560ff16105b613c905760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b60448201526064016120a7565b6000613c9c8489613f0d565b905080600080613cac8b86614e1d565b90506000805b86811015613d33578b60ff168103613ccc57899150613cff565b8a60ff168114613cf757888181518110613ce857613ce8614d3e565b60200260200101519150613cff565b600101613cb2565b613d098285614dd8565b9350613d158783614e1d565b613d1f8787614e1d565b613d299190614db0565b9450600101613cb2565b50613d3e8683614e1d565b6064613d4a8787614e1d565b613d549190614e1d565b613d5e9190614db0565b9350600082613d6e606488614e1d565b613d789190614db0565b613d829085614dd8565b9050600086815b610100811015613e02578192508884836002613da59190614e1d565b613daf9190614dd8565b613db99190614d87565b88613dc48480614e1d565b613dce9190614dd8565b613dd89190614db0565b9150613de482846140ba565b15613dfa57509850611d76975050505050505050565b600101613d89565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765000060448201526064016120a7565b60608315613eba578251600003613eb3576001600160a01b0385163b613eb35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016120a7565b50816123b8565b6123b883836140d0565b600481015460028201546001830154909190808314801590613ee557508142105b15613f06576000846003015490508083038142038502428503840201049350505b5050919050565b815160009081805b82811015613f4c57858181518110613f2f57613f2f614d3e565b602002602001015182613f429190614dd8565b9150600101613f15565b5080600003613f605760009250505061040c565b60008181613f6e8588614e1d565b905060005b61010081101561407b578260005b87811015613fcc57878b8281518110613f9c57613f9c614d3e565b6020026020010151613fae9190614e1d565b613fb88684614e1d565b613fc29190614db0565b9150600101613f81565b5083945080876001613fde9190614dd8565b613fe89190614e1d565b606485613ff58287614d87565b613fff9190614e1d565b6140099190614db0565b6140139190614dd8565b8461401e8984614e1d565b606461402a8a88614e1d565b6140349190614db0565b61403e9190614dd8565b6140489190614e1d565b6140529190614db0565b935061405e84866140ba565b15614072578397505050505050505061040c565b50600101613f73565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b60448201526064016120a7565b600060026140c884846140fa565b109392505050565b8151156140e05781518083602001fd5b8060405162461bcd60e51b81526004016120a7919061513f565b6000818311156141155761410e8284614d87565b905061040c565b6120548383614d87565b828054828255906000526020600020908101928215614172579160200282015b828111156141725781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061413f565b5061417e929150614182565b5090565b5b8082111561417e5760008155600101614183565b63ffffffff811681146131ee57600080fd5b80356127f981614197565b6000602082840312156141c657600080fd5b813561205481614197565b6001600160a01b03811681146131ee57600080fd5b80356127f9816141d1565b60006020828403121561420357600080fd5b8135612054816141d1565b60006020828403121561422057600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156142685783516001600160a01b031683529284019291840191600101614243565b50909695505050505050565b60006101a0828403121561428757600080fd5b50919050565b600080604083850312156142a057600080fd5b82356001600160401b038111156142b657600080fd5b6142c285828601614274565b95602094909401359450505050565b6000806000606084860312156142e657600080fd5b8335925060208401356142f8816141d1565b929592945050506040919091013590565b60006020828403121561431b57600080fd5b81356001600160401b0381111561433157600080fd5b820160a0818503121561205457600080fd5b60008083601f84011261435557600080fd5b5081356001600160401b0381111561436c57600080fd5b60208301915083602082850101111561309d57600080fd5b60008060008060008060008060006101008a8c0312156143a357600080fd5b89356143ae81614197565b985060208a01356143be816141d1565b975060408a01356143ce816141d1565b965060608a01356143de816141d1565b955060808a0135945060a08a0135935060c08a01356001600160401b0381111561440757600080fd5b6144138c828d01614343565b9a9d999c50979a9699959894979660e00135949350505050565b60008060008060008060008060e0898b03121561444957600080fd5b883561445481614197565b97506020890135614464816141d1565b96506040890135614474816141d1565b95506060890135614484816141d1565b94506080890135935060a0890135925060c08901356001600160401b038111156144ad57600080fd5b6144b98b828c01614343565b999c989b5096995094979396929594505050565b600080604083850312156144e057600080fd5b82356144eb81614197565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b600481106131ee57634e487b7160e01b600052602160045260246000fd5b6020810161453a8361450f565b91905290565b60006020828403121561455257600080fd5b81356001600160401b0381111561456857600080fd5b6123b884828501614274565b60006020828403121561458657600080fd5b815161205481614197565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b03811182821017156145ca576145ca614591565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145f8576145f8614591565b604052919050565b80151581146131ee57600080fd5b80356127f981614600565b60006001600160401b0382111561463257614632614591565b50601f01601f191660200190565b600082601f83011261465157600080fd5b813561466461465f82614619565b6145d0565b81815284602083860101111561467957600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a082360312156146a957600080fd5b6146b16145a7565b6146ba836141a9565b81526146c8602084016141a9565b60208201526146d9604084016141a9565b60408201526146ea606084016141e6565b60608201526146fb608084016141e6565b608082015261470c60a0840161460e565b60a082015260c08301356001600160401b0381111561472a57600080fd5b61473636828601614640565b60c08301525060e083013560e08201526101006147548185016141e6565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b6000823561019e198336030181126147a257600080fd5b9190910192915050565b6000808335601e198436030181126147c357600080fd5b83016020810192503590506001600160401b038111156147e257600080fd5b80360382131561309d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261483157600080fd5b83016020810192503590506001600160401b0381111561485057600080fd5b8060051b360382131561309d57600080fd5b8183526000602080850194508260005b858110156148a0578135614885816141d1565b6001600160a01b031687529582019590820190600101614872565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156148fb5782840389526148dc82886147ac565b6148e78682846147f1565b9a87019a95505050908401906001016148c5565b5091979650505050505050565b608081526000610120863561019e1988360301811261492657600080fd5b60a06080850152870161494882850161493e836141a9565b63ffffffff169052565b614954602082016141a9565b6101406149688187018363ffffffff169052565b614974604084016141a9565b915061016061498a8188018463ffffffff169052565b614996606085016141e6565b92506101806149af818901856001600160a01b03169052565b6149bb608086016141e6565b93506101a06149d4818a01866001600160a01b03169052565b6149e060a0870161460e565b8015156101c08b015294506149f860c08701876147ac565b9550816101e08b0152614a106102c08b0187836147f1565b9550505060e0850135610200890152610100614a2d8187016141e6565b6001600160a01b03166102208a0152858701356102408a0152838601356102608a0152828601356102808a0152818601356102a08a0152614a7160208e018e61481a565b97509550607f199350838986030160a08a0152614a8f858888614862565b9650614a9e60408e018e61481a565b96509450838988030160c08a0152614ab78787876148ab565b9650614ac560608e016141e6565b6001600160a01b03811660e08b01529550614ae360808e018e6147ac565b965094508389880301818a015250505050614aff8383836147f1565b9350505050614b1960208301866001600160a01b03169052565b836040830152611d7660608301846001600160a01b03169052565b60005b83811015614b4f578181015183820152602001614b37565b50506000910152565b60008151808452614b70816020860160208601614b34565b601f01601f19169290920160200192915050565b805163ffffffff16825260006101a06020830151614baa602086018263ffffffff169052565b506040830151614bc2604086018263ffffffff169052565b506060830151614bdd60608601826001600160a01b03169052565b506080830151614bf860808601826001600160a01b03169052565b5060a0830151614c0c60a086018215159052565b5060c08301518160c0860152614c2482860182614b58565b91505060e083015160e085015261010080840151614c4c828701826001600160a01b03169052565b50506101208381015190850152610140808401519085015261016080840151908501526101809283015192909301919091525090565b6020815260006120546020830184614b84565b6000808335601e19843603018112614cac57600080fd5b8301803591506001600160401b03821115614cc657600080fd5b6020019150600581901b360382131561309d57600080fd5b838152604060208201526000611d76604083018486614862565b6000808335601e19843603018112614d0f57600080fd5b8301803591506001600160401b03821115614d2957600080fd5b60200191503681900382131561309d57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614d6657600080fd5b813561205481614600565b634e487b7160e01b600052601160045260246000fd5b8181038181111561040c5761040c614d71565b634e487b7160e01b600052601260045260246000fd5b600082614dbf57614dbf614d9a565b500490565b600082614dd357614dd3614d9a565b500690565b8082018082111561040c5761040c614d71565b600060018201614dfd57614dfd614d71565b5060010190565b600060208284031215614e1657600080fd5b5051919050565b808202811582820484141761040c5761040c614d71565b8183823760009101908152919050565b878152602081018790526001600160a01b0386811660408301528516606082015263ffffffff8416608082015260c060a08201819052600090614e8a90830184866147f1565b9998505050505050505050565b82151581526040602082015260006123b86040830184614b58565b60ff828116828216039081111561040c5761040c614d71565b600181815b80851115614f06578160001904821115614eec57614eec614d71565b80851615614ef957918102915b93841c9390800290614ed0565b509250929050565b600082614f1d5750600161040c565b81614f2a5750600061040c565b8160018114614f405760028114614f4a57614f66565b600191505061040c565b60ff841115614f5b57614f5b614d71565b50506001821b61040c565b5060208310610133831016604e8410600b8410161715614f89575081810a61040c565b614f938383614ecb565b8060001904821115614fa757614fa7614d71565b029392505050565b600061205460ff841683614f0e565b63ffffffff60e01b8660e01b168152846004820152614fdc8461450f565b60f89390931b60248401526025830191909152604582015260650192915050565b60006020828403121561500f57600080fd5b8151612054816141d1565b63ffffffff84168152826020820152606060408201526000611d766060830184614b58565b6000806040838503121561505257600080fd5b8251915060208301516001600160401b0381111561506f57600080fd5b8301601f8101851361508057600080fd5b805161508e61465f82614619565b8181528660208385010111156150a357600080fd5b6150b4826020830160208601614b34565b8093505050509250929050565b60a0815260006150d460a0830188614b84565b6001600160a01b038781166020850152604084018790528516606084015282810360808401526151048185614b58565b98975050505050505050565b60006020828403121561512257600080fd5b815161205481614600565b600082516147a2818460208701614b34565b6020815260006120546020830184614b5856fea2646970667358221220b3745c181bcabe79dbd6b8fa569e80b409db4fded39d27aeea132babd9352f6264736f6c63430008110033", + "deployedBytecode": "0x60806040526004361061011f5760003560e01c80636989ca7c116100a0578063affed0e011610064578063affed0e01461033e578063b49c53a714610353578063bfd7903014610373578063c2fb26a6146103b0578063cb8058ba146103d557600080fd5b80636989ca7c146102b85780638a336231146102d85780638aac16ba146102f857806391f5de791461030b57806393f18ac51461031e57600080fd5b806341bdc8b5116100e757806341bdc8b51461020a578063541267111461022a57806359efa1621461024a57806363e3e7d21461026a578063674dc9331461029857600080fd5b8063121cca3114610124578063159e041f146101615780631a8bc0e1146101aa5780632424401f146101d75780633339df96146101ec575b600080fd5b34801561013057600080fd5b5061014461013f3660046141b4565b6103f5565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016d57600080fd5b5061019a61017c3660046141f1565b6001600160a01b03166000908152601f602052604090205460ff1690565b6040519015158152602001610158565b3480156101b657600080fd5b506101ca6101c536600461420e565b610412565b6040516101589190614227565b6101ea6101e536600461420e565b61047e565b005b3480156101f857600080fd5b506020546001600160a01b0316610144565b34801561021657600080fd5b506101ea6102253660046141f1565b6104e6565b34801561023657600080fd5b506101ea61024536600461428d565b610643565b34801561025657600080fd5b506101ea6102653660046142d1565b610745565b34801561027657600080fd5b5061028a610285366004614309565b6107da565b604051908152602001610158565b3480156102a457600080fd5b5061028a6102b3366004614384565b610999565b3480156102c457600080fd5b506101ea6102d33660046141f1565b610ac1565b3480156102e457600080fd5b506101ea6102f33660046141f1565b610bb9565b61028a61030636600461442d565b610cd5565b61028a61031936600461442d565b610dfa565b34801561032a57600080fd5b5061028a610339366004614384565b610f0c565b34801561034a57600080fd5b5060035461028a565b34801561035f57600080fd5b506101ea61036e3660046144cd565b611020565b34801561037f57600080fd5b506103a361038e36600461420e565b60009081526008602052604090205460ff1690565b604051610158919061452d565b3480156103bc57600080fd5b5060045460405163ffffffff9091168152602001610158565b3480156103e157600080fd5b506101ea6103f0366004614540565b61113e565b63ffffffff81166000908152600f60205260408120545b92915050565b60008181526009602090815260409182902080548351818402810184019094528084526060939283018282801561047257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610454575b50505050509050919050565b601654600119016104a257604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156104d257604051633ee5b89360e01b815260040160405180910390fd5b6104de8160003461120b565b506001601655565b336104ef6112d2565b6001600160a01b03161415801561052a575060033360009081526014602052604090205460ff166003811115610527576105276144f9565b14155b1561054857604051637b32c26b60e01b815260040160405180910390fd5b600480546040805163234d8e3d60e21b81529051849363ffffffff909316926001600160a01b03851692638d3638f492818301926020928290030181865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190614574565b63ffffffff16146105df57604051621ff66160e61b815260040160405180910390fd5b604080516001600160a01b03841681523360208201527fd6e53d12bb441b2201be4949c7f431b383623888df2abfeef43aaaf272802d50910160405180910390a1602080546001600160a01b0319166001600160a01b039290921691909117905550565b813361065560a08301608084016141f1565b6001600160a01b03161461067c5760405163e3613aff60e01b815260040160405180910390fd5b61271082111561069f57604051633345cd4360e11b815260040160405180910390fd5b60045463ffffffff166106b860408501602086016141b4565b63ffffffff16146106dc57604051632a8e462760e01b815260040160405180910390fd5b60006106ef6106ea85614696565b611300565b6000818152600d6020526040908190208590555190915081907fb243c3cea6cd1bbfd64d5d0765f13734ca7b87fdf14e017391fe12a8891434ca906107379086815260200190565b60405180910390a250505050565b6016546001190161076957604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561079957604051633ee5b89360e01b815260040160405180910390fd5b806000036107ba576040516348e7dc3f60e01b815260040160405180910390fd5b6107c382611330565b50506107d083838361120b565b5050600160165550565b6016546000906001190161080157604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561083157604051633ee5b89360e01b815260040160405180910390fd5b60008061083d846113a6565b909250905060006001826003811115610858576108586144f9565b14610864576002610867565b60035b60008481526008602052604090208054919250829160ff19166001836003811115610894576108946144f9565b0217905550600080806108ef866108d36108ae8b8061478b565b61018001356108bd8c8061478b565b6108ce9060608101906040016141b4565b611767565b60038760038111156108e7576108e76144f9565b14158b6117a9565b9194509250905060006109198985858a60038a6003811115610913576109136144f9565b14611d36565b90506001600160a01b03831661092f8a8061478b565b6109409060808101906060016141f1565b6001600160a01b0316887f0b07a8b0b083f8976b3c832b720632f49cb8ba1e7a99e1b145f51a47d3391cb78c86863360405161097f9493929190614908565b60405180910390a450506001601655509295945050505050565b601754600090600119016109c0576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528c1660208083019190915260008284018190526001600160a01b03808e1660608501528b166080840152600160a08401528351601f88018390048302810183019094528684529260c08301918890889081908401838280828437600092018290525093855250505060208083018a905233604080850191909152606084018390526080840183905260a0840183905260c090930191909152815180830183526001600160a01b038d168082528183018c905283518085019094528352908201869052919250610aad918391611d7f565b60016017559b9a5050505050505050505050565b33610aca6112d2565b6001600160a01b031614158015610b05575060033360009081526014602052604090205460ff166003811115610b0257610b026144f9565b14155b15610b2357604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff16610b5c57604051637840a40d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19169055815192835233908301527f4860b0a180d4b5969c2757493a999f05d0b22318320f154a02170aa239e24b1391015b60405180910390a150565b33610bc26112d2565b6001600160a01b031614158015610bfd575060033360009081526014602052604090205460ff166003811115610bfa57610bfa6144f9565b14155b15610c1b57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116610c42576040516332f9c08d60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff1615610c7c5760405163e2a4506360e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19166001179055815192835233908301527f3860a100215fe93b6b95ed1ae0870e538f85a73b30d073f63fefc60e08b0c1249101610bae565b60175460009060011901610cfc576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a16608084015260a083018190528351601f87018390048302810183019094528584529260c083019187908790819084018382808284376000920182905250938552505050602080830189905233604080850191909152606084018390526080840183905260a0840183905260c0909301829052825180840184526001600160a01b038d1681528082018b905283518085019094529183523490830152919250610de7918391611d7f565b60016017559a9950505050505050505050565b60175460009060011901610e21576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a166080840152600160a08401528351601f87018390048302810183019094528584529260c083019187908790819084018382808284376000920182905250938552505050602080830189905233604080850191909152606084018390526080840183905260a0840183905260c0909301829052825180840184526001600160a01b038d1681528082018b905283518085019094529183523490830152919250610de7918391611d7f565b60175460009060011901610f33576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528c1660208083019190915260008284018190526001600160a01b03808e1660608501528b16608084015260a083018190528351601f88018390048302810183019094528684529260c08301918890889081908401838280828437600092018290525093855250505060208083018a905233604080850191909152606084018390526080840183905260a0840183905260c090930191909152815180830183526001600160a01b038d168082528183018c905283518085019094528352908201869052919250610aad918391611d7f565b336110296112d2565b6001600160a01b031614158015611064575060033360009081526014602052604090205460ff166003811115611061576110616144f9565b14155b1561108257604051637b32c26b60e01b815260040160405180910390fd5b806110a057604051633bca644d60e11b815260040160405180910390fd5b63ffffffff821615806110bd575060045463ffffffff8381169116145b156110db57604051632892757b60e21b815260040160405180910390fd5b63ffffffff82166000818152600f602090815260409182902084905581519283526001600160a01b038416908301523382820152517fb07f562723347d6ea7f9f37b3b31f96b65104c3339d1c89e1b6fa88e2410b85c9181900360600190a15050565b803361115060a08301608084016141f1565b6001600160a01b0316146111775760405163e3613aff60e01b815260040160405180910390fd5b60045463ffffffff1661119060408401602085016141b4565b63ffffffff16146111b457604051630ada556f60e31b815260040160405180910390fd5b60006111c26106ea84614696565b6000818152600e6020526040808220805460ff191660011790555191925082917f2510041334ede909998b9aefcca4300fc36c670dd00e1f7f0afffaca56adcb399190a2505050565b6002546001600160a01b03168061123557604051630bd7619560e41b815260040160405180910390fd5b6001600160a01b0383166112735734600003611264576040516348e7dc3f60e01b815260040160405180910390fd5b61126e818361205b565b611288565b61127d838361217e565b6112888382846122cf565b604080518381526001600160a01b0385166020820152339181019190915284907ff90d3aafcedf55a0da208dd26d915e0ce1870ee9221586012487a0b366106f6590606001610737565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6000816040516020016113139190614c82565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201526000806113508461230e565b9050600061136682602001518360000151611767565b90506113718161232d565b60020154600160a01b900460ff1661139c5760405163a13f958f60e01b815260040160405180910390fd5b9094909350915050565b336000908152600b6020526040812054819060ff161580156113f457506113cd838061478b565b6113de9060a08101906080016141f1565b6001600160a01b0316336001600160a01b031614155b1561141257604051637c32a2b360e01b815260040160405180910390fd5b60045463ffffffff16611425848061478b565b6114369060408101906020016141b4565b63ffffffff161461145a5760405163b6bb322560e01b815260040160405180910390fd5b60006114696020850185614c95565b91506000905061148561147c868061478b565b6106ea90614696565b60008181526008602052604090205490915060ff16821561172a57600c548311156114c3576040516313c06ef360e01b815260040160405180910390fd5b60008160038111156114d7576114d76144f9565b146114f557604051630caaeb0b60e11b815260040160405180910390fd5b601f60006115096080890160608a016141f1565b6001600160a01b0316815260208101919091526040016000205460ff1661154357604051631fa09b5360e31b815260040160405180910390fd5b611590826115546020890189614c95565b60405160200161156693929190614cde565b60408051601f19818403018152919052805160209091012061158b6080890189614cf8565b61236e565b6001600160a01b03166115a960808801606089016141f1565b6001600160a01b0316146115d057604051638579eca560e01b815260040160405180910390fd5b6040805160208082018590528183018690528251808303840181526060909201909252805191012060005b848110156117235761160b6123c0565b15801561166857506015600061162460208b018b614c95565b8481811061163457611634614d3e565b905060200201602081019061164991906141f1565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561168657604051630e1eb7f760e31b815260040160405180910390fd5b6116b98261169760408b018b614c95565b848181106116a7576116a7614d3e565b905060200281019061158b9190614cf8565b6001600160a01b03166116cf60208a018a614c95565b838181106116df576116df614d3e565b90506020020160208101906116f491906141f1565b6001600160a01b03161461171b57604051633a1dd23360e21b815260040160405180910390fd5b6001016115fb565b505061175c565b600181600381111561173e5761173e6144f9565b1461175c57604051636320d2cf60e11b815260040160405180910390fd5b909590945092505050565b6000828260405160200161178b92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080806117ba6020850185614c95565b60008981526009602052604090206117d392909161411f565b5060006117e0858061478b565b6117f19060608101906040016141b4565b63ffffffff16156118325761182f8761180a878061478b565b6101800135611819888061478b565b61182a9060608101906040016141b4565b6123e7565b90505b61183c858061478b565b610120013560000361185657600093509150819050611d2c565b6000611862868061478b565b6118739060c081019060a001614d54565b8061188c57506000898152600e602052604090205460ff165b9050600061189a878061478b565b610120013590508715611c3a5760006118b66020890189614c95565b91506118da90506118c7898061478b565b61012001356000600101546127106123f6565b915080600103611acb5782158015611951575081600a60006118ff60208c018c614c95565b600081811061191057611910614d3e565b905060200201602081019061192591906141f1565b6001600160a01b0390811682526020808301939093526040918201600090812091891681529252902054105b80156119675750601b546001600160a01b031615155b15611a36576015600061197d60208b018b614c95565b600081811061198e5761198e614d3e565b90506020020160208101906119a391906141f1565b6001600160a01b03168152602081019190915260400160002054610100900460ff166119e2576040516310c4e50960e01b815260040160405180910390fd5b600080611a238d8d866119f860208f018f614c95565b6000818110611a0957611a09614d3e565b9050602002016020810190611a1e91906141f1565b61240d565b9099509750949550611d2c945050505050565b81600a6000611a4860208c018c614c95565b6000818110611a5957611a59614d3e565b9050602002016020810190611a6e91906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000206000828254611ac09190614d87565b90915550611c389050565b6000611ad78284614db0565b905060005b611ae7600184614d87565b811015611b845781600a6000611b0060208e018e614c95565b85818110611b1057611b10614d3e565b9050602002016020810190611b2591906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611b779190614d87565b9091555050600101611adc565b506000611b918385614dc4565b611b9b9083614dd8565b905080600a6000611baf60208e018e614c95565b611bba600189614d87565b818110611bc957611bc9614d3e565b9050602002016020810190611bde91906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611c309190614d87565b909155505050505b505b611c44878061478b565b611c559060608101906040016141b4565b60045463ffffffff9081169116148015611c7b57506000611c758a61232d565b60030154115b15611ca75760008981526007602052604081206004018054839290611ca1908490614d87565b90915550505b8115611cd25760008a8152600e60205260409020805460ff191690559450909250829150611d2c9050565b60008a8152600d602052604081208054908290559080611d1e8c8786868503611d0857611cff8e8061478b565b60e00135611d0a565b865b611d148f8061478b565b61014001356125cc565b909950975094955050505050505b9450945094915050565b6000611d5d84611d46888061478b565b611d579060808101906060016141f1565b876122cf565b611d7383868685611d6e8b8061478b565b612651565b50835b95945050505050565b601a54600090600160a01b900460ff1615611dad57604051633ee5b89360e01b815260040160405180910390fd5b82516000906001600160a01b0316158015611dcb5750602084015115155b15611de95760405163ae715ad360e01b815260040160405180910390fd5b611df685602001516127c5565b60608601519091506001600160a01b0316611e235760405162845fdd60e41b815260040160405180910390fd5b6127108560e001511115611e4a5760405163388d723160e11b815260040160405180910390fd5b6040805180820190915260008082526020820181905290819086516000906001600160a01b031615611ff1576000611e858960000151611330565b90935090506000611e958261232d565b84518c5163ffffffff9081169116149350905082611ebd5780546001600160a01b0316611ec3565b60208401515b95506001600160a01b038616611eec5760405163965a46c160e01b815260040160405180910390fd5b6003810154838015611efe5750600081115b15611f4f5760008b602001518360040154611f199190614dd8565b905081811115611f3c576040516348ba8bf160e01b815260040160405180910390fd5b6000848152600760205260409020600401555b50835163ffffffff1660408c01526020808501516101808d01528a015115611fee57611f838a600001518b6020015161217e565b611f9c828b60000151888d602001518f60e001516127fe565b6101208c01528951611fe7906001600160a01b03888116911614611fce576001820154600160a01b900460ff16611fdb565b8154600160a01b900460ff165b60128c60200151612881565b6101408c01525b50505b6003805490600061200183614deb565b909155506101608a015261201489611300565b60208801519093501561203457612034838860000151896020015161120b565b61204c838a8a600001518b6020015189878a886128ec565b509093505050505b9392505050565b804710156120b05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146120fd576040519150601f19603f3d011682016040523d82523d6000602084013e612102565b606091505b50509050806121795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016120a7565b505050565b8060000361218a575050565b6001600160a01b0382166121b157604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156121fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221e9190614e04565b90506122356001600160a01b038316333086612ad3565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa15801561227d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a19190614e04565b6122ab9190614d87565b146122c957604051630e40773560e21b815260040160405180910390fd5b50505050565b806000036122dc57505050565b6001600160a01b03831661230357604051633a48ca7b60e11b815260040160405180910390fd5b612179838383612b3e565b604080518082019091526000808252602082015261040c826000612b6e565b6000818152600760205260408120600180820154839291600160a01b90910460ff1610156120545760405163618cca3f60e11b815260040160405180910390fd5b60006123b861237c85612c66565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ca192505050565b949350505050565b6000806123cb6112d2565b6001600160a01b031614806123e2575060125460ff165b905090565b60006123b88484846000612cc5565b6000816124038486614e1d565b6123b89190614db0565b600080600061241b86612d00565b601b546040516369a933a560e01b81526001600160a01b03808416600483015260248201899052306044830152600060648301529293509116906369a933a590608401600060405180830381600087803b15801561247857600080fd5b505af115801561248c573d6000803e3d6000fd5b5050601b54604051631a4ca37b60e21b81526001600160a01b038581166004830152602482018a90523060448301526000945090911691506369328dec906064016020604051808303816000875af11580156124ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125109190614e04565b9050858110156125335760405163407559a360e11b815260040160405180910390fd5b6000888152601d60205260409020869055601c5461271090612556908890614e1d565b6125609190614db0565b6000898152601e60209081526040918290209290925580516001600160a01b038581168252928101899052918716918a917f2d3ba0fa5be2ef8cb1ec8920a07a6cbccc2397b18ca3e70f48ea695500b8f218910160405180910390a35084925090505b94509492505050565b60008060006125da8861232d565b60018101549091506001600160a01b0390811690881681036126025786935091506126479050565b866000036126165786935091506126479050565b6126408989838a61263b60128860010160149054906101000a900460ff168c8e612d39565b612d85565b9350935050505b9550959350505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061267f60c0830183614cf8565b60405161268d929190614e34565b604051809103902003156127be576000806127546126b160808501606086016141f1565b6127105a6126bf9190614d87565b600061010063fd614f4160e01b8c8c8c8c6126db5760006126ed565b6126ed6101208d016101008e016141f1565b6126fa60208e018e6141b4565b61270760c08f018f614cf8565b60405160240161271d9796959493929190614e44565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ec4565b9150915083158015612764575081155b15612781576040516264cdd360e41b815260040160405180910390fd5b867fb1a4ab59facaedd6d3a71da3902e0a1fa5b99750c0e20cd878334378a41cb33583836040516127b3929190614e97565b60405180910390a250505b5050505050565b63ffffffff81166000908152600f6020526040902054806127f957604051630c3bcd4960e41b815260040160405180910390fd5b919050565b60008260000361281057506000611d76565b846001600160a01b0316846001600160a01b031603612830575081611d76565b600061283b8761232d565b905060006128748888888861263b8760010160149054906101000a900460ff168860000160149054906101000a900460ff168c8c612d39565b5098975050505050505050565b60008260ff168460ff1603612897575080612054565b60008360ff168560ff1610156128cd576128b18585614eb2565b6128bc90600a614faf565b6128c69084614e1d565b90506123b8565b6128d78486614eb2565b6128e290600a614faf565b611d769084614db0565b610120870151801561295e578161295e57604051632770a7eb60e21b8152306004820152602481018290526001600160a01b03841690639dc29fac90604401600060405180830381600087803b15801561294557600080fd5b505af1158015612959573d6000803e3d6000fd5b505050505b6000846000015185602001516003848d604051602001612982959493929190614fbe565b60408051601f1981840301815282825260208054639fa92f9d60e01b8552925191945060009384936001600160a01b031692639fa92f9d926004808401939192918290030181865afa1580156129dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a009190614ffd565b6001600160a01b031663fa31de018c602001518a866040518463ffffffff1660e01b8152600401612a339392919061501a565b6000604051808303816000875af1158015612a52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a7a919081019061503f565b91509150818b61016001518d7fed8e6ba697dd65259e5ce532ac08ff06d1a3607bcec58f8f0937fe36a5666c548e8e8e8c88604051612abd9594939291906150c1565b60405180910390a4505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526122c99085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f4e565b6040516001600160a01b03831660248201526044810182905261217990849063a9059cbb60e01b90606401612b07565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b038416612bab57905061040c565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215612bf657905061040c565b612c008484613020565b15612c2657600483015463ffffffff1681526001600160a01b0384166020820152612054565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01611313565b6000806000612cb0858561305f565b91509150612cbd816130a4565b509392505050565b600481015460009063ffffffff90811690841603612ce45750826123b8565b612ced8561232d565b546001600160a01b031695945050505050565b600080612d0c8361232d565b600101546001600160a01b031690508061040c57604051630558a50760e31b815260040160405180910390fd5b600082600003612d4b575060006123b8565b6000612710612d5a8482614d87565b612d649086614e1d565b612d6e9190614db0565b9050612d7b868683612881565b9695505050505050565b600085815260186020526040812081908190612da0816131f1565b15612dd257612dc6612db28a8a61320e565b612dbc8b8a61320e565b839190898961328e565b87935093505050612647565b6000612ddd8a61232d565b600201546001600160a01b0390811691508990612dfe908216836000613597565b612e126001600160a01b038216838a6136ac565b6001600160a01b03821663d460f0a2898c8c8b612e31610e1042614dd8565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af1158015612e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb69190614e04565b899550955050505050612647565b6000606060008060008661ffff166001600160401b03811115612ee957612ee9614591565b6040519080825280601f01601f191660200182016040528015612f13576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612f34578692505b828152826000602083013e90999098509650505050505050565b6000612fa3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661375e9092919063ffffffff16565b8051909150156121795780806020019051810190612fc19190615110565b6121795760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016120a7565b6001600160a01b038216600090815260068201602052604081205463ffffffff161561304e5750600061040c565b50506001600160a01b03163b151590565b60008082516041036130955760208301516040840151606085015160001a6130898782858561376d565b9450945050505061309d565b506000905060025b9250929050565b60008160048111156130b8576130b86144f9565b036130c05750565b60018160048111156130d4576130d46144f9565b036131215760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016120a7565b6002816004811115613135576131356144f9565b036131825760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016120a7565b6003816004811115613196576131966144f9565b036131ee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016120a7565b50565b600c81015460009060ff1615801561040c57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff169291908390811061325b5761325b614d3e565b6000918252602090912001546001600160a01b0316146123b85760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff16156132d65760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b60448201526064016120a7565b85600a018560ff16815481106132ee576132ee614d3e565b90600052602060002001548311156133415760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b60448201526064016120a7565b600080600088600a0180548060200260200160405190810160405280929190818152602001828054801561339457602002820191906000526020600020905b815481526020019060010190808311613380575b505050505090506133a8898989898561382e565b9093509150848310156133ea5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b60448201526064016120a7565b6000896009018860ff168154811061340457613404614d3e565b90600052602060002001546402540be4008b60060154856134259190614e1d565b61342f9190614db0565b6134399190614db0565b905086828a60ff168151811061345157613451614d3e565b60200260200101516134639190614dd8565b8a600a018a60ff168154811061347b5761347b614d3e565b90600052602060002001819055508084838a60ff16815181106134a0576134a0614d3e565b60200260200101516134b29190614d87565b6134bc9190614d87565b8a600a018960ff16815481106134d4576134d4614d3e565b600091825260209091200155801561353957808a600b018960ff16815481106134ff576134ff614d3e565b90600052602060002001546135149190614dd8565b8a600b018960ff168154811061352c5761352c614d3e565b6000918252602090912001555b8954604080518981526020810187905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b8015806136115750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f9190614e04565b155b61367c5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016120a7565b6040516001600160a01b03831660248201526044810182905261217990849063095ea7b360e01b90606401612b07565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156136fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137219190614e04565b61372b9190614dd8565b6040516001600160a01b0385166024820152604481018290529091506122c990859063095ea7b360e01b90606401612b07565b60606123b884846000856139f4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156137a457506000905060036125c3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156137f8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613821576000600192509250506125c3565b9660009650945050505050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561388157602002820191906000526020600020905b81548152602001906001019080831161386d575b5050505050905060006138948583613acf565b905080518860ff161080156138ac575080518760ff16105b6138ed5760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b60448201526064016120a7565b6000818960ff168151811061390457613904614d3e565b6020026020010151838a60ff168151811061392157613921614d3e565b6020026020010151886139349190614e1d565b61393e9190614dd8565b9050600061395761394e8c613bd9565b8b8b8587613be4565b9050600181848b60ff168151811061397157613971614d3e565b60200260200101516139839190614d87565b61398d9190614d87565b95506402540be4008b60050154876139a59190614e1d565b6139af9190614db0565b9450838960ff16815181106139c6576139c6614d3e565b602002602001015185876139da9190614d87565b6139e49190614db0565b9550505050509550959350505050565b606082471015613a555760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016120a7565b600080866001600160a01b03168587604051613a71919061512d565b60006040518083038185875af1925050503d8060008114613aae576040519150601f19603f3d011682016040523d82523d6000602084013e613ab3565b606091505b5091509150613ac487838387613e4b565b979650505050505050565b81518151606091908114613b1c5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b60448201526064016120a7565b6000816001600160401b03811115613b3657613b36614591565b604051908082528060200260200182016040528015613b5f578160200160208202803683370190505b50905060005b82811015613bd057848181518110613b7f57613b7f614d3e565b6020026020010151868281518110613b9957613b99614d3e565b6020026020010151613bab9190614e1d565b828281518110613bbd57613bbd614d3e565b6020908102919091010152600101613b65565b50949350505050565b600061040c82613ec4565b805160009060ff80861690871603613c3e5760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c6600000000000000000060448201526064016120a7565b808660ff16108015613c525750808560ff16105b613c905760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b60448201526064016120a7565b6000613c9c8489613f0d565b905080600080613cac8b86614e1d565b90506000805b86811015613d33578b60ff168103613ccc57899150613cff565b8a60ff168114613cf757888181518110613ce857613ce8614d3e565b60200260200101519150613cff565b600101613cb2565b613d098285614dd8565b9350613d158783614e1d565b613d1f8787614e1d565b613d299190614db0565b9450600101613cb2565b50613d3e8683614e1d565b6064613d4a8787614e1d565b613d549190614e1d565b613d5e9190614db0565b9350600082613d6e606488614e1d565b613d789190614db0565b613d829085614dd8565b9050600086815b610100811015613e02578192508884836002613da59190614e1d565b613daf9190614dd8565b613db99190614d87565b88613dc48480614e1d565b613dce9190614dd8565b613dd89190614db0565b9150613de482846140ba565b15613dfa57509850611d76975050505050505050565b600101613d89565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765000060448201526064016120a7565b60608315613eba578251600003613eb3576001600160a01b0385163b613eb35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016120a7565b50816123b8565b6123b883836140d0565b600481015460028201546001830154909190808314801590613ee557508142105b15613f06576000846003015490508083038142038502428503840201049350505b5050919050565b815160009081805b82811015613f4c57858181518110613f2f57613f2f614d3e565b602002602001015182613f429190614dd8565b9150600101613f15565b5080600003613f605760009250505061040c565b60008181613f6e8588614e1d565b905060005b61010081101561407b578260005b87811015613fcc57878b8281518110613f9c57613f9c614d3e565b6020026020010151613fae9190614e1d565b613fb88684614e1d565b613fc29190614db0565b9150600101613f81565b5083945080876001613fde9190614dd8565b613fe89190614e1d565b606485613ff58287614d87565b613fff9190614e1d565b6140099190614db0565b6140139190614dd8565b8461401e8984614e1d565b606461402a8a88614e1d565b6140349190614db0565b61403e9190614dd8565b6140489190614e1d565b6140529190614db0565b935061405e84866140ba565b15614072578397505050505050505061040c565b50600101613f73565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b60448201526064016120a7565b600060026140c884846140fa565b109392505050565b8151156140e05781518083602001fd5b8060405162461bcd60e51b81526004016120a7919061513f565b6000818311156141155761410e8284614d87565b905061040c565b6120548383614d87565b828054828255906000526020600020908101928215614172579160200282015b828111156141725781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061413f565b5061417e929150614182565b5090565b5b8082111561417e5760008155600101614183565b63ffffffff811681146131ee57600080fd5b80356127f981614197565b6000602082840312156141c657600080fd5b813561205481614197565b6001600160a01b03811681146131ee57600080fd5b80356127f9816141d1565b60006020828403121561420357600080fd5b8135612054816141d1565b60006020828403121561422057600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156142685783516001600160a01b031683529284019291840191600101614243565b50909695505050505050565b60006101a0828403121561428757600080fd5b50919050565b600080604083850312156142a057600080fd5b82356001600160401b038111156142b657600080fd5b6142c285828601614274565b95602094909401359450505050565b6000806000606084860312156142e657600080fd5b8335925060208401356142f8816141d1565b929592945050506040919091013590565b60006020828403121561431b57600080fd5b81356001600160401b0381111561433157600080fd5b820160a0818503121561205457600080fd5b60008083601f84011261435557600080fd5b5081356001600160401b0381111561436c57600080fd5b60208301915083602082850101111561309d57600080fd5b60008060008060008060008060006101008a8c0312156143a357600080fd5b89356143ae81614197565b985060208a01356143be816141d1565b975060408a01356143ce816141d1565b965060608a01356143de816141d1565b955060808a0135945060a08a0135935060c08a01356001600160401b0381111561440757600080fd5b6144138c828d01614343565b9a9d999c50979a9699959894979660e00135949350505050565b60008060008060008060008060e0898b03121561444957600080fd5b883561445481614197565b97506020890135614464816141d1565b96506040890135614474816141d1565b95506060890135614484816141d1565b94506080890135935060a0890135925060c08901356001600160401b038111156144ad57600080fd5b6144b98b828c01614343565b999c989b5096995094979396929594505050565b600080604083850312156144e057600080fd5b82356144eb81614197565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b600481106131ee57634e487b7160e01b600052602160045260246000fd5b6020810161453a8361450f565b91905290565b60006020828403121561455257600080fd5b81356001600160401b0381111561456857600080fd5b6123b884828501614274565b60006020828403121561458657600080fd5b815161205481614197565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b03811182821017156145ca576145ca614591565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145f8576145f8614591565b604052919050565b80151581146131ee57600080fd5b80356127f981614600565b60006001600160401b0382111561463257614632614591565b50601f01601f191660200190565b600082601f83011261465157600080fd5b813561466461465f82614619565b6145d0565b81815284602083860101111561467957600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a082360312156146a957600080fd5b6146b16145a7565b6146ba836141a9565b81526146c8602084016141a9565b60208201526146d9604084016141a9565b60408201526146ea606084016141e6565b60608201526146fb608084016141e6565b608082015261470c60a0840161460e565b60a082015260c08301356001600160401b0381111561472a57600080fd5b61473636828601614640565b60c08301525060e083013560e08201526101006147548185016141e6565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b6000823561019e198336030181126147a257600080fd5b9190910192915050565b6000808335601e198436030181126147c357600080fd5b83016020810192503590506001600160401b038111156147e257600080fd5b80360382131561309d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261483157600080fd5b83016020810192503590506001600160401b0381111561485057600080fd5b8060051b360382131561309d57600080fd5b8183526000602080850194508260005b858110156148a0578135614885816141d1565b6001600160a01b031687529582019590820190600101614872565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156148fb5782840389526148dc82886147ac565b6148e78682846147f1565b9a87019a95505050908401906001016148c5565b5091979650505050505050565b608081526000610120863561019e1988360301811261492657600080fd5b60a06080850152870161494882850161493e836141a9565b63ffffffff169052565b614954602082016141a9565b6101406149688187018363ffffffff169052565b614974604084016141a9565b915061016061498a8188018463ffffffff169052565b614996606085016141e6565b92506101806149af818901856001600160a01b03169052565b6149bb608086016141e6565b93506101a06149d4818a01866001600160a01b03169052565b6149e060a0870161460e565b8015156101c08b015294506149f860c08701876147ac565b9550816101e08b0152614a106102c08b0187836147f1565b9550505060e0850135610200890152610100614a2d8187016141e6565b6001600160a01b03166102208a0152858701356102408a0152838601356102608a0152828601356102808a0152818601356102a08a0152614a7160208e018e61481a565b97509550607f199350838986030160a08a0152614a8f858888614862565b9650614a9e60408e018e61481a565b96509450838988030160c08a0152614ab78787876148ab565b9650614ac560608e016141e6565b6001600160a01b03811660e08b01529550614ae360808e018e6147ac565b965094508389880301818a015250505050614aff8383836147f1565b9350505050614b1960208301866001600160a01b03169052565b836040830152611d7660608301846001600160a01b03169052565b60005b83811015614b4f578181015183820152602001614b37565b50506000910152565b60008151808452614b70816020860160208601614b34565b601f01601f19169290920160200192915050565b805163ffffffff16825260006101a06020830151614baa602086018263ffffffff169052565b506040830151614bc2604086018263ffffffff169052565b506060830151614bdd60608601826001600160a01b03169052565b506080830151614bf860808601826001600160a01b03169052565b5060a0830151614c0c60a086018215159052565b5060c08301518160c0860152614c2482860182614b58565b91505060e083015160e085015261010080840151614c4c828701826001600160a01b03169052565b50506101208381015190850152610140808401519085015261016080840151908501526101809283015192909301919091525090565b6020815260006120546020830184614b84565b6000808335601e19843603018112614cac57600080fd5b8301803591506001600160401b03821115614cc657600080fd5b6020019150600581901b360382131561309d57600080fd5b838152604060208201526000611d76604083018486614862565b6000808335601e19843603018112614d0f57600080fd5b8301803591506001600160401b03821115614d2957600080fd5b60200191503681900382131561309d57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614d6657600080fd5b813561205481614600565b634e487b7160e01b600052601160045260246000fd5b8181038181111561040c5761040c614d71565b634e487b7160e01b600052601260045260246000fd5b600082614dbf57614dbf614d9a565b500490565b600082614dd357614dd3614d9a565b500690565b8082018082111561040c5761040c614d71565b600060018201614dfd57614dfd614d71565b5060010190565b600060208284031215614e1657600080fd5b5051919050565b808202811582820484141761040c5761040c614d71565b8183823760009101908152919050565b878152602081018790526001600160a01b0386811660408301528516606082015263ffffffff8416608082015260c060a08201819052600090614e8a90830184866147f1565b9998505050505050505050565b82151581526040602082015260006123b86040830184614b58565b60ff828116828216039081111561040c5761040c614d71565b600181815b80851115614f06578160001904821115614eec57614eec614d71565b80851615614ef957918102915b93841c9390800290614ed0565b509250929050565b600082614f1d5750600161040c565b81614f2a5750600061040c565b8160018114614f405760028114614f4a57614f66565b600191505061040c565b60ff841115614f5b57614f5b614d71565b50506001821b61040c565b5060208310610133831016604e8410600b8410161715614f89575081810a61040c565b614f938383614ecb565b8060001904821115614fa757614fa7614d71565b029392505050565b600061205460ff841683614f0e565b63ffffffff60e01b8660e01b168152846004820152614fdc8461450f565b60f89390931b60248401526025830191909152604582015260650192915050565b60006020828403121561500f57600080fd5b8151612054816141d1565b63ffffffff84168152826020820152606060408201526000611d766060830184614b58565b6000806040838503121561505257600080fd5b8251915060208301516001600160401b0381111561506f57600080fd5b8301601f8101851361508057600080fd5b805161508e61465f82614619565b8181528660208385010111156150a357600080fd5b6150b4826020830160208601614b34565b8093505050509250929050565b60a0815260006150d460a0830188614b84565b6001600160a01b038781166020850152604084018790528516606084015282810360808401526151048185614b58565b98975050505050505050565b60006020828403121561512257600080fd5b815161205481614600565b600082516147a2818460208701614b34565b6020815260006120546020830184614b5856fea2646970667358221220b3745c181bcabe79dbd6b8fa569e80b409db4fded39d27aeea132babd9352f6264736f6c63430008110033", + "devdoc": { + "events": { + "AavePortalMintUnbacked(bytes32,address,address,uint256)": { + "params": { + "amount": "- The amount of asset that was provided by Aave Portal", + "asset": "- The asset that was provided by Aave Portal", + "router": "- The authorized router that used Aave Portal liquidity", + "transferId": "- The unique identifier of the crosschain transaction" + } + }, + "Executed(bytes32,address,address,((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),address,uint256,address)": { + "details": "`execute` may be called when providing fast liquidity or when processing a reconciled (slow) transfer.", + "params": { + "amount": "- The amount of transferring asset the recipient address receives or the external call is executed with.", + "args": "- The `ExecuteArgs` provided to the function.", + "asset": "- The asset the recipient is given or the external call is executed with. Should be the adopted asset on that chain.", + "caller": "- The account that called the function.", + "local": "- The local asset that was either supplied by the router for a fast-liquidity transfer or minted by the bridge in a reconciled (slow) transfer. Could be the same as the adopted `asset` param.", + "to": "- The recipient `TransferInfo.to` provided, created as indexed parameter.", + "transferId": "- The unique identifier of the crosschain transfer." + } + }, + "ExternalCalldataExecuted(bytes32,bool,bytes)": { + "params": { + "returnData": "- Return bytes from the IXReceiver", + "success": "- Whether calldata succeeded", + "transferId": "- The unique identifier of the crosschain transfer." + } + }, + "ForceReceiveLocal(bytes32)": { + "params": { + "transferId": "- The unique identifier of the crosschain transaction" + } + }, + "RemoteAdded(uint32,address,address)": { + "params": { + "caller": "- The account that called the function", + "domain": "- The domain the remote instance is on", + "remote": "- The address of the remote instance" + } + }, + "SequencerAdded(address,address)": { + "params": { + "caller": "- The account that called the function", + "sequencer": "- The sequencer address to be added or removed" + } + }, + "SequencerRemoved(address,address)": { + "params": { + "caller": "- The account that called the function", + "sequencer": "- The sequencer address to be added or removed" + } + }, + "SlippageUpdated(bytes32,uint256)": { + "params": { + "slippage": "- The updated slippage boundary", + "transferId": "- The unique identifier of the crosschain transaction" + } + }, + "TransferRelayerFeesIncreased(bytes32,uint256,address,address)": { + "params": { + "asset": "- The asset the fee was increased with", + "caller": "- The account that called the function", + "increase": "- The additional amount fees increased by", + "transferId": "- The unique identifier of the crosschain transaction" + } + }, + "XAppConnectionManagerSet(address,address)": { + "params": { + "caller": "- The account that called the function", + "updated": "- The updated address" + } + }, + "XCalled(bytes32,uint256,bytes32,(uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,address,bytes)": { + "params": { + "amount": "- The amount sent in with xcall", + "asset": "- The asset sent in with xcall", + "local": "- The local asset that is controlled by the bridge and can be burned/minted", + "messageHash": "- The hash of the message bytes (containing all transfer info) that were bridged.", + "nonce": "- The bridge nonce of the transfer on the origin domain.", + "params": "- The `TransferInfo` provided to the function.", + "transferId": "- The unique identifier of the crosschain transfer." + } + } + }, + "kind": "dev", + "methods": { + "addSequencer(address)": { + "params": { + "_sequencer": "- The sequencer address to add." + } + }, + "bumpTransfer(bytes32)": { + "params": { + "_transferId": "- The unique identifier of the crosschain transaction" + } + }, + "bumpTransfer(bytes32,address,uint256)": { + "params": { + "_relayerFee": "- The amount you want to bump transfer fee with", + "_relayerFeeAsset": "- The asset you are bumping fee with", + "_transferId": "- The unique identifier of the crosschain transaction" + } + }, + "enrollRemoteRouter(uint32,bytes32)": { + "params": { + "_domain": "The domain of the remote xApp Router", + "_router": "The address of the remote xApp Router" + } + }, + "execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))": { + "details": "Can be called before or after `handle` [reconcile] is called (regarding the same transfer), depending on whether the fast liquidity route (i.e. funds provided by routers) is being used for this transfer. As a result, executed calldata (including properties like `originSender`) may or may not be verified depending on whether the reconcile has been completed (i.e. the optimistic confirmation period has elapsed).", + "params": { + "_args": "- ExecuteArgs arguments." + }, + "returns": { + "_0": "bytes32 - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur." + } + }, + "forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))": { + "details": "Calldata will still be executed with the local asset. `IXReceiver` contracts should be able to handle local assets in event of failures.", + "params": { + "_params": "TransferInfo associated with the transfer" + } + }, + "forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)": { + "params": { + "_params": "TransferInfo associated with the transfer", + "_slippage": "The updated slippage" + } + }, + "removeSequencer(address)": { + "params": { + "_sequencer": "- The sequencer address to remove." + } + }, + "setXAppConnectionManager(address)": { + "params": { + "_xAppConnectionManager": "The address of the xAppConnectionManager contract" + } + } + }, + "version": 1 + }, + "userdoc": { + "events": { + "AavePortalMintUnbacked(bytes32,address,address,uint256)": { + "notice": "Emitted when a router used Aave Portal liquidity for fast transfer" + }, + "Executed(bytes32,address,address,((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),address,uint256,address)": { + "notice": "Emitted when `execute` is called on the destination domain of a transfer." + }, + "ExternalCalldataExecuted(bytes32,bool,bytes)": { + "notice": "Emitted when a transfer has its external data executed" + }, + "ForceReceiveLocal(bytes32)": { + "notice": "Emitted when `forceReceiveLocal` is called by a user-delegated EOA on the destination domain" + }, + "RemoteAdded(uint32,address,address)": { + "notice": "Emitted when a new remote instance is added" + }, + "SequencerAdded(address,address)": { + "notice": "Emitted when a sequencer is added or removed from allowlists" + }, + "SequencerRemoved(address,address)": { + "notice": "Emitted when a sequencer is added or removed from allowlists" + }, + "SlippageUpdated(bytes32,uint256)": { + "notice": "Emitted when `forceUpdateSlippage` is called by user-delegated EOA on the destination domain" + }, + "TransferRelayerFeesIncreased(bytes32,uint256,address,address)": { + "notice": "Emitted when `_bumpTransfer` is called by an user on the origin domain both in `xcall` and `bumpTransfer`" + }, + "XAppConnectionManagerSet(address,address)": { + "notice": "Emitted `xAppConnectionManager` is updated" + }, + "XCalled(bytes32,uint256,bytes32,(uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,address,bytes)": { + "notice": "Emitted when `xcall` is called on the origin domain of a transfer." + } + }, + "kind": "user", + "methods": { + "addSequencer(address)": { + "notice": "Used to add an approved sequencer to the allowlist." + }, + "bumpTransfer(bytes32)": { + "notice": "Anyone can call this function on the origin domain to increase the relayer fee for a transfer." + }, + "bumpTransfer(bytes32,address,uint256)": { + "notice": "Anyone can call this function on the origin domain t o increase the relayer fee for a given transfer using a specific asset." + }, + "enrollRemoteRouter(uint32,bytes32)": { + "notice": "Register the address of a Router contract for the same xApp on a remote chain" + }, + "execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes))": { + "notice": "Called on a destination domain to disburse correct assets to end recipient and execute any included calldata." + }, + "forceReceiveLocal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32))": { + "notice": "Allows a user-specified account to withdraw the local asset directly" + }, + "forceUpdateSlippage((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256)": { + "notice": "Allows a user-specified account to update the slippage they are willing to take on destination transfers." + }, + "removeSequencer(address)": { + "notice": "Used to remove an approved sequencer from the allowlist." + }, + "setXAppConnectionManager(address)": { + "notice": "Modify the contract the xApp uses to validate Replica contracts" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/BridgeFacet.sol:BridgeFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/ConnextStaging.json b/packages/deployments/contracts/deployments/fraxtal/ConnextStaging.json new file mode 100644 index 0000000000..29e5c2e771 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/ConnextStaging.json @@ -0,0 +1,6678 @@ +{ + "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "initContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ], + "internalType": "struct ConnextDiamond.Initialization[]", + "name": "_initializations", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ConnextDiamond__fallback_facetNotExit", + "type": "error" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badBurn", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badMint", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_invalidParams", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_remainsCustodied", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_representationListed", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_localNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_onlyRemote", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "adoptedAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "localAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cap", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "swapPool", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "StableSwapAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "representation", + "type": "address" + } + ], + "name": "TokenDeployed", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "addStableSwapPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_adopted", + "type": "address" + } + ], + "name": "adoptedToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "getCustodiedAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "getLocalAndAdoptedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_candidate", + "type": "address" + } + ], + "name": "getTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "representationToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "_canonicalDecimals", + "type": "uint8" + }, + { + "internalType": "string", + "name": "_representationName", + "type": "string" + }, + { + "internalType": "string", + "name": "_representationSymbol", + "type": "string" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_cap", + "type": "uint256" + } + ], + "name": "setupAsset", + "outputs": [ + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "setupAssetWithDeployedRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "updateDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "updateLiquidityCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_invalidSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_noRelayerVault", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_valueIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__excecute_insufficientGas", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_badFastLiquidityStatus", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_externalCallFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidRouterSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidSequencerSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_maxRoutersExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notApprovedForPortals", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_unapprovedSender", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_wrongDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceReceiveLocal_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__onlyDelegate_notDelegate", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__removeSequencer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_emptyTo", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet_xcall__emptyLocalAsset", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "AavePortalMintUnbacked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct ExecuteArgs", + "name": "args", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "ExternalCalldataExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + } + ], + "name": "ForceReceiveLocal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "remote", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RemoteAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "SlippageUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "increase", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "TransferRelayerFeesIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "XAppConnectionManagerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "indexed": false, + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "XCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "addSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "approvedSequencers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_relayerFeeAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_router", + "type": "bytes32" + } + ], + "name": "enrollRemoteRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "internalType": "struct ExecuteArgs", + "name": "_args", + "type": "tuple" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + } + ], + "name": "forceReceiveLocal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + } + ], + "name": "forceUpdateSlippage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "remote", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "removeSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "routedTransfers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + } + ], + "name": "setXAppConnectionManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "transferStatus", + "outputs": [ + { + "internalType": "enum DestinationTransferStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "xAppConnectionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "InboxFacet__handle_notTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyRemoteRouter_notRemote", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyReplica_notReplica", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_alreadyReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_noPortalRouter", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "actual", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "TypedMemView__assertType_typeAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__assertValid_validityAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "originAndNonce", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Receive", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Reconciled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_origin", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_nonce", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + } + ], + "name": "handle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__revokeRole_invalidInput", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "AssignRoleAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "AssignRoleRouter", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "AssignRoleWatcher", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "revokedAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum Role", + "name": "revokedRole", + "type": "uint8" + } + ], + "name": "RevokeRole", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "RouterAllowlistRemovalProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "renounced", + "type": "bool" + } + ], + "name": "RouterAllowlistRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "name": "assignRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "assignRoleRouterAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "assignRoleWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposeRouterAllowlistRemoval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_role", + "type": "address" + } + ], + "name": "queryRole", + "outputs": [ + { + "internalType": "enum Role", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeRouterAllowlist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_revoke", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistRemoved", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_invalidAsset", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_zeroAmount", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_assetNotApproved", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__setAavePortalFee_invalidFee", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePoolUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalRepayment", + "type": "event" + }, + { + "inputs": [], + "name": "aavePool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "aavePortalFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalFeeDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxIn", + "type": "uint256" + } + ], + "name": "repayAavePortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_portalAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + } + ], + "name": "repayAavePortalFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_aavePool", + "type": "address" + } + ], + "name": "setAavePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_aavePortalFeeNumerator", + "type": "uint256" + } + ], + "name": "setAavePortalFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "RelayerFacet__addRelayer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__removeRelayer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerFeeVaultUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "addRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "approvedRelayers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "relayerFeeVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "removeRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayerFeeVault", + "type": "address" + } + ], + "name": "setRelayerFeeVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__initializeRouter_configNotEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_notNewOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterOwner_noChange", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterRecipient_notNewRecipient", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouterForPortal_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_routerEmpty", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "liquidityFeeNumerator", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityFeeNumeratorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxRoutersPerTransfer", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MaxRoutersPerTransferUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterApprovedForPortal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "RouterInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "RouterOwnerAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevProposed", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newProposed", + "type": "address" + } + ], + "name": "RouterOwnerProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevRecipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newRecipient", + "type": "address" + } + ], + "name": "RouterRecipientSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterUnapprovedForPortal", + "type": "event" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_NUMERATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "acceptProposedRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "name": "addRouterLiquidity", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "addRouterLiquidityFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwnerTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApprovalForPortal", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "initializeRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxRoutersPerTransfer", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_proposed", + "type": "address" + } + ], + "name": "proposeRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + } + ], + "name": "removeRouterLiquidity", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "removeRouterLiquidityFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "routerBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_numerator", + "type": "uint256" + } + ], + "name": "setLiquidityFeeNumerator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newMaxRouters", + "type": "uint256" + } + ], + "name": "setMaxRoutersPerTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "setRouterRecipient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenIndex_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapToken_outOfRange", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "AddLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "NewSwapFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidityImbalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "boughtId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + } + ], + "name": "RemoveLiquidityOne", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensSold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "soldId", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "boughtId", + "type": "uint128" + } + ], + "name": "TokenSwap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addSwapLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateRemoveSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + } + ], + "name": "calculateRemoveSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "availableTokenAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + } + ], + "name": "calculateSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "deposit", + "type": "bool" + } + ], + "name": "calculateSwapTokenAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapA", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapAPrecise", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSwapAdminBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapLPToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapStorage", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "internalType": "struct SwapUtils.Swap", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } + ], + "name": "getSwapTokenIndex", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapVirtualPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "maxBurnAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityImbalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "minAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minDy", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExact", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_alreadyDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_aExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_duplicateTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_feeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notDisabledPool", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LPTokenTargetUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SwapUtils.Swap", + "name": "swap", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "disableSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "_pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "string", + "name": "lpTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "lpTokenSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_adminFee", + "type": "uint256" + } + ], + "name": "initializeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lpTokenTargetAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + } + ], + "name": "rampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "removeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "setSwapAdminFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "setSwapFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "stopRampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "updateLpTokenTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "withdrawSwapAdminFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "DiamondCutProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCutRescinded", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "getAcceptanceTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "proposeDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "rescindDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "DiamondInit__init_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "DiamondInit__init_domainsDontMatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_acceptanceDelay", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_lpTokenTargetAddress", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "facetFunctionSelectors_", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x6a8c1a894c2d277685fd17a4e4ff4a67e287572358ae95f92a8a9a17b151f5b2", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "transactionIndex": 1, + "gasUsed": "6265178", + "logsBloom": "0x00000000000000000000000000000000000000000000400000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000100000800000000000000000000020000000000000000000800000000000000000000000000000000400020000000000000000000010000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xddd466c0bd25677104f9d3e8d36ed4bb95e953aee484abb3d2efde8701210dde", + "transactionHash": "0x6a8c1a894c2d277685fd17a4e4ff4a67e287572358ae95f92a8a9a17b151f5b2", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2894868, + "transactionHash": "0x6a8c1a894c2d277685fd17a4e4ff4a67e287572358ae95f92a8a9a17b151f5b2", + "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xddd466c0bd25677104f9d3e8d36ed4bb95e953aee484abb3d2efde8701210dde" + }, + { + "transactionIndex": 1, + "blockNumber": 2894868, + "transactionHash": "0x6a8c1a894c2d277685fd17a4e4ff4a67e287572358ae95f92a8a9a17b151f5b2", + "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "topics": [ + "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000008200000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000c600000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000016e0000000000000000000000000000000000000000000000000000000000000178000000000000000000000000062b3a7d4d1cc43187c950a2c80253e5cb67765cd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000141506e46300000000000000000000000000000000000000000000000000000000600620910000000000000000000000000000000000000000000000000000000080dc2248000000000000000000000000000000000000000000000000000000009b5985190000000000000000000000000000000000000000000000000000000057bd0a3200000000000000000000000000000000000000000000000000000000ae8bc0de000000000000000000000000000000000000000000000000000000002c1999d000000000000000000000000000000000000000000000000000000000bd8671a7000000000000000000000000000000000000000000000000000000001ecf6f9f00000000000000000000000000000000000000000000000000000000ad4c777100000000000000000000000000000000000000000000000000000000949de9690000000000000000000000000000000000000000000000000000000007a38d7b00000000000000000000000000000000000000000000000000000000f1537686000000000000000000000000000000000000000000000000000000005a2164e500000000000000000000000000000000000000000000000000000000a1b193010000000000000000000000000000000000000000000000000000000003e418c200000000000000000000000000000000000000000000000000000000b64a5e0700000000000000000000000000000000000000000000000000000000e1cb395800000000000000000000000000000000000000000000000000000000c405842900000000000000000000000000000000000000000000000000000000e9d7bcec00000000000000000000000000000000000000000000000000000000000000000000000000000000912541ad966244f278c997e34f80a33aff9b28570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000148a33623100000000000000000000000000000000000000000000000000000000159e041f000000000000000000000000000000000000000000000000000000002424401f0000000000000000000000000000000000000000000000000000000059efa16200000000000000000000000000000000000000000000000000000000c2fb26a600000000000000000000000000000000000000000000000000000000b49c53a70000000000000000000000000000000000000000000000000000000063e3e7d200000000000000000000000000000000000000000000000000000000cb8058ba000000000000000000000000000000000000000000000000000000005412671100000000000000000000000000000000000000000000000000000000affed0e000000000000000000000000000000000000000000000000000000000121cca31000000000000000000000000000000000000000000000000000000006989ca7c000000000000000000000000000000000000000000000000000000001a8bc0e10000000000000000000000000000000000000000000000000000000041bdc8b500000000000000000000000000000000000000000000000000000000bfd79030000000000000000000000000000000000000000000000000000000003339df96000000000000000000000000000000000000000000000000000000008aac16ba0000000000000000000000000000000000000000000000000000000093f18ac500000000000000000000000000000000000000000000000000000000674dc9330000000000000000000000000000000000000000000000000000000091f5de79000000000000000000000000000000000000000000000000000000000000000000000000000000005efe4a498a9b4ea0dc86e1772a17dc62ab4105ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001ab2dc3f500000000000000000000000000000000000000000000000000000000000000000000000000000000f28eeca075d63886c6152672b926cf89d9782780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000012c5b350df00000000000000000000000000000000000000000000000000000000bb271a27000000000000000000000000000000000000000000000000000000002ec0c00200000000000000000000000000000000000000000000000000000000a9943b1b000000000000000000000000000000000000000000000000000000006a42b8f8000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000008456cb59000000000000000000000000000000000000000000000000000000005c975abb00000000000000000000000000000000000000000000000000000000b1f8100d00000000000000000000000000000000000000000000000000000000c56ce35800000000000000000000000000000000000000000000000000000000d1851c92000000000000000000000000000000000000000000000000000000003cf52ffb00000000000000000000000000000000000000000000000000000000c91cb56a0000000000000000000000000000000000000000000000000000000023986f7d0000000000000000000000000000000000000000000000000000000080e52e3f000000000000000000000000000000000000000000000000000000006be557850000000000000000000000000000000000000000000000000000000012232937000000000000000000000000000000000000000000000000000000003f4ba83a0000000000000000000000000000000000000000000000000000000000000000000000000000000004b83cdacb4d6548ac583afdef6677128a789428000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000008a03e4bc300000000000000000000000000000000000000000000000000000000ef1eb0c10000000000000000000000000000000000000000000000000000000009d7ba5400000000000000000000000000000000000000000000000000000000d1e5f31c00000000000000000000000000000000000000000000000000000000b3f62fcb0000000000000000000000000000000000000000000000000000000075d3237100000000000000000000000000000000000000000000000000000000349f937c000000000000000000000000000000000000000000000000000000003bd30d34000000000000000000000000000000000000000000000000000000000000000000000000000000005cc220030aff5a2068a62feac09553f0b6604f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005dd39f00d000000000000000000000000000000000000000000000000000000008cba8b6a0000000000000000000000000000000000000000000000000000000065bc85820000000000000000000000000000000000000000000000000000000060f0a5ac00000000000000000000000000000000000000000000000000000000f01b3e010000000000000000000000000000000000000000000000000000000000000000000000000000000097477e71b0dacd9581bf43becc1db95d6b0a998e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000184b72c5da000000000000000000000000000000000000000000000000000000000951d6d80000000000000000000000000000000000000000000000000000000009935b8f0000000000000000000000000000000000000000000000000000000054064594000000000000000000000000000000000000000000000000000000002d3f9ef600000000000000000000000000000000000000000000000000000000f259cd2700000000000000000000000000000000000000000000000000000000da3a892f000000000000000000000000000000000000000000000000000000003b688da60000000000000000000000000000000000000000000000000000000012d57170000000000000000000000000000000000000000000000000000000001407093b000000000000000000000000000000000000000000000000000000008770e68200000000000000000000000000000000000000000000000000000000e9160f3e00000000000000000000000000000000000000000000000000000000c6bf691d00000000000000000000000000000000000000000000000000000000b214c901000000000000000000000000000000000000000000000000000000009bf6d8750000000000000000000000000000000000000000000000000000000022a3c00700000000000000000000000000000000000000000000000000000000f72c504800000000000000000000000000000000000000000000000000000000fd5bd5fe0000000000000000000000000000000000000000000000000000000041258b5c00000000000000000000000000000000000000000000000000000000582c78d2000000000000000000000000000000000000000000000000000000008290471600000000000000000000000000000000000000000000000000000000ffaf3f1a00000000000000000000000000000000000000000000000000000000911b8ee20000000000000000000000000000000000000000000000000000000004376ff400000000000000000000000000000000000000000000000000000000000000000000000000000000194a79b1ee4da43d30ce8a35a32abceabe641ad20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000148d36545700000000000000000000000000000000000000000000000000000000a02288f40000000000000000000000000000000000000000000000000000000029d99b10000000000000000000000000000000000000000000000000000000008f11d27f0000000000000000000000000000000000000000000000000000000076ca2e5200000000000000000000000000000000000000000000000000000000d251dc35000000000000000000000000000000000000000000000000000000007652f59d000000000000000000000000000000000000000000000000000000001301caa2000000000000000000000000000000000000000000000000000000008b480b12000000000000000000000000000000000000000000000000000000002d91a51500000000000000000000000000000000000000000000000000000000b3a4eab400000000000000000000000000000000000000000000000000000000bb0577eb00000000000000000000000000000000000000000000000000000000ad94911b00000000000000000000000000000000000000000000000000000000f495e807000000000000000000000000000000000000000000000000000000004bbcba8e00000000000000000000000000000000000000000000000000000000241ca57a00000000000000000000000000000000000000000000000000000000b6618dff00000000000000000000000000000000000000000000000000000000ff126de90000000000000000000000000000000000000000000000000000000080b297e80000000000000000000000000000000000000000000000000000000074c6b89b00000000000000000000000000000000000000000000000000000000000000000000000000000000273c33499f774d2c2466ef95352a7016474c43ee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000bea027c2f00000000000000000000000000000000000000000000000000000000e5f6220f000000000000000000000000000000000000000000000000000000004b141bb4000000000000000000000000000000000000000000000000000000002bf63bcc000000000000000000000000000000000000000000000000000000001963e426000000000000000000000000000000000000000000000000000000003e74aea0000000000000000000000000000000000000000000000000000000009c8eab970000000000000000000000000000000000000000000000000000000043be5eaf0000000000000000000000000000000000000000000000000000000072a30e08000000000000000000000000000000000000000000000000000000008dc5148400000000000000000000000000000000000000000000000000000000a1a23c2900000000000000000000000000000000000000000000000000000000000000000000000000000000324c5834cd3bd19c4991f4fc5b3a0ff5257a692b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000041f931c1c0000000000000000000000000000000000000000000000000000000056a8ea4800000000000000000000000000000000000000000000000000000000bbf2358e000000000000000000000000000000000000000000000000000000002c67849c0000000000000000000000000000000000000000000000000000000000000000000000000000000018ece1437793f7a786ef4e32d9f6c239890a7d9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000019a7e155e000000000000000000000000000000000000000000000000000000000000000000000000000000003bcf4185443a339517ad4e580067f178d1b68e1d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed6270000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 1, + "blockHash": "0xddd466c0bd25677104f9d3e8d36ed4bb95e953aee484abb3d2efde8701210dde" + } + ], + "blockNumber": 2894868, + "cumulativeGasUsed": "6332840", + "status": 1, + "byzantium": true + }, + "args": [ + "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + [ + { + "facetAddress": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", + "functionSelectors": [ + "0x1506e463", + "0x60062091", + "0x80dc2248", + "0x9b598519", + "0x57bd0a32", + "0xae8bc0de", + "0x2c1999d0", + "0xbd8671a7", + "0x1ecf6f9f", + "0xad4c7771", + "0x949de969", + "0x07a38d7b", + "0xf1537686", + "0x5a2164e5", + "0xa1b19301", + "0x03e418c2", + "0xb64a5e07", + "0xe1cb3958", + "0xc4058429", + "0xe9d7bcec" + ], + "action": 0 + }, + { + "facetAddress": "0x912541Ad966244F278c997E34F80A33AFF9B2857", + "functionSelectors": [ + "0x8a336231", + "0x159e041f", + "0x2424401f", + "0x59efa162", + "0xc2fb26a6", + "0xb49c53a7", + "0x63e3e7d2", + "0xcb8058ba", + "0x54126711", + "0xaffed0e0", + "0x121cca31", + "0x6989ca7c", + "0x1a8bc0e1", + "0x41bdc8b5", + "0xbfd79030", + "0x3339df96", + "0x8aac16ba", + "0x93f18ac5", + "0x674dc933", + "0x91f5de79" + ], + "action": 0 + }, + { + "facetAddress": "0x5efE4a498a9b4Ea0DC86e1772A17Dc62Ab4105AD", + "functionSelectors": [ + "0xab2dc3f5" + ], + "action": 0 + }, + { + "facetAddress": "0xF28Eeca075D63886C6152672b926CF89d9782780", + "functionSelectors": [ + "0xc5b350df", + "0xbb271a27", + "0x2ec0c002", + "0xa9943b1b", + "0x6a42b8f8", + "0x8da5cb5b", + "0x8456cb59", + "0x5c975abb", + "0xb1f8100d", + "0xc56ce358", + "0xd1851c92", + "0x3cf52ffb", + "0xc91cb56a", + "0x23986f7d", + "0x80e52e3f", + "0x6be55785", + "0x12232937", + "0x3f4ba83a" + ], + "action": 0 + }, + { + "facetAddress": "0x04B83cdACB4D6548aC583AFdEF6677128A789428", + "functionSelectors": [ + "0xa03e4bc3", + "0xef1eb0c1", + "0x09d7ba54", + "0xd1e5f31c", + "0xb3f62fcb", + "0x75d32371", + "0x349f937c", + "0x3bd30d34" + ], + "action": 0 + }, + { + "facetAddress": "0x5cC220030AFf5a2068A62FEaC09553f0B6604f60", + "functionSelectors": [ + "0xdd39f00d", + "0x8cba8b6a", + "0x65bc8582", + "0x60f0a5ac", + "0xf01b3e01" + ], + "action": 0 + }, + { + "facetAddress": "0x97477e71B0dacd9581bf43bEcC1DB95d6b0A998E", + "functionSelectors": [ + "0x4b72c5da", + "0x0951d6d8", + "0x09935b8f", + "0x54064594", + "0x2d3f9ef6", + "0xf259cd27", + "0xda3a892f", + "0x3b688da6", + "0x12d57170", + "0x1407093b", + "0x8770e682", + "0xe9160f3e", + "0xc6bf691d", + "0xb214c901", + "0x9bf6d875", + "0x22a3c007", + "0xf72c5048", + "0xfd5bd5fe", + "0x41258b5c", + "0x582c78d2", + "0x82904716", + "0xffaf3f1a", + "0x911b8ee2", + "0x04376ff4" + ], + "action": 0 + }, + { + "facetAddress": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", + "functionSelectors": [ + "0x8d365457", + "0xa02288f4", + "0x29d99b10", + "0x8f11d27f", + "0x76ca2e52", + "0xd251dc35", + "0x7652f59d", + "0x1301caa2", + "0x8b480b12", + "0x2d91a515", + "0xb3a4eab4", + "0xbb0577eb", + "0xad94911b", + "0xf495e807", + "0x4bbcba8e", + "0x241ca57a", + "0xb6618dff", + "0xff126de9", + "0x80b297e8", + "0x74c6b89b" + ], + "action": 0 + }, + { + "facetAddress": "0x273c33499f774D2C2466ef95352A7016474C43ee", + "functionSelectors": [ + "0xea027c2f", + "0xe5f6220f", + "0x4b141bb4", + "0x2bf63bcc", + "0x1963e426", + "0x3e74aea0", + "0x9c8eab97", + "0x43be5eaf", + "0x72a30e08", + "0x8dc51484", + "0xa1a23c29" + ], + "action": 0 + }, + { + "facetAddress": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", + "functionSelectors": [ + "0x1f931c1c", + "0x56a8ea48", + "0xbbf2358e", + "0x2c67849c" + ], + "action": 0 + }, + { + "facetAddress": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", + "functionSelectors": [ + "0x9a7e155e" + ], + "action": 0 + }, + { + "facetAddress": "0x3Bcf4185443A339517aD4e580067f178d1B68E1D", + "functionSelectors": [ + "0xcdffacc6", + "0x52ef6b2c", + "0xadfca15e", + "0x7a0ed627", + "0x01ffc9a7" + ], + "action": 0 + } + ], + [ + { + "initContract": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", + "initData": "0x2a84809100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000148e2b093000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "initContract": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", + "initData": "0x9a7e155e00000000000000000000000000000000000000000000000000000000667261780000000000000000000000009963a1e4fd60ba4a89e92930c8d8686514705bb600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000296da2ce82eb3b98eb05925bc5777c7da0d0f09" + } + ] + ], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contractOwner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"initContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ConnextDiamond.Initialization[]\",\"name\":\"_initializations\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ConnextDiamond__fallback_facetNotExit\",\"type\":\"error\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_contractOwner\":\"the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\",\"_diamondCut\":\"the list of facet to add\",\"_initializations\":\"the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"This construct a diamond contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/ConnextDiamond.sol\":\"ConnextDiamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/helpers/ConnextDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\ncontract ConnextDiamond {\\n error ConnextDiamond__fallback_facetNotExit();\\n\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n uint256 len = _initializations.length;\\n for (uint256 i = 0; i < len; ) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n if (facet == address(0)) {\\n revert ConnextDiamond__fallback_facetNotExit();\\n }\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x5081103031ce4c9a3d1ba724d3e4acfc4e2f52fa6936ccfcedb5c2b557e38506\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405260405162002c3738038062002c37833981016040819052620000269162001497565b6001600160a01b038316156200004c576200004c83620000ed60201b620000821760201c565b62000074826000604051806020016040528060008152506200017b60201b6200010f1760201c565b805160005b81811015620000e257620000d98382815181106200009b576200009b6200166b565b602002602001015160000151848381518110620000bc57620000bc6200166b565b602002602001015160200151620004a160201b620003eb1760201c565b60010162000079565b50505050506200187f565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602062002b8b833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602062002b8b83398151915290600090620001a690869086908690602001620016c5565b60408051601f198184030181529190528051602090910120600283015490915015620002525760008181526005830160205260409020548015801590620001ed5750428111155b6200023f5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c617073656400000060448201526064015b60405180910390fd5b5060008181526005830160205260408120555b845160005b818110156200044f5760008782815181106200027757620002776200166b565b6020026020010151602001519050600060028111156200029b576200029b62001681565b816002811115620002b057620002b062001681565b036200030e5762000308888381518110620002cf57620002cf6200166b565b602002602001015160000151898481518110620002f057620002f06200166b565b602002602001015160400151620006c660201b60201c565b62000445565b600181600281111562000325576200032562001681565b036200037d57620003088883815181106200034457620003446200166b565b6020026020010151600001518984815181106200036557620003656200166b565b6020026020010151604001516200094360201b60201c565b600281600281111562000394576200039462001681565b03620003ec5762000308888381518110620003b357620003b36200166b565b602002602001015160000151898481518110620003d457620003d46200166b565b60200260200101516040015162000bd260201b60201c565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b606482015260840162000236565b5060010162000257565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516200048593929190620016c5565b60405180910390a1620004998585620004a1565b505050505050565b6001600160a01b0382166200052b57805115620005275760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606482015260840162000236565b5050565b8051600003620005a45760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606482015260840162000236565b6001600160a01b0382163014620005da57620005da8260405180606001604052806028815260200162002bab6028913962000dcd565b600080836001600160a01b031683604051620005f79190620017cc565b600060405180830381855af49150503d806000811462000634576040519150601f19603f3d011682016040523d82523d6000602084013e62000639565b606091505b509150915081620006c05780511562000668578060405162461bcd60e51b8152600401620002369190620017ea565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b606482015260840162000236565b50505050565b80516000036200071c5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002b8b8339815191526001600160a01b038316620007885760405162461bcd60e51b815260206004820152602c602482015260008051602062002bd383398151915260448201526b65206164647265737328302960a01b606482015260840162000236565b6001600160a01b0383166000908152600182016020526040812054906001600160601b0382169003620007c157620007c1828562000dfe565b825160005b8181101562000499576000858281518110620007e657620007e66200166b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156200088e5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c7265616479206578697374730000000000000000000000606482015260840162000236565b6001600160e01b0319821660008181526020888152604080832080546001600160a01b03908116600160a01b6001600160601b038d16021782558d168085526001808d0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925288905281546001600160a01b0319161790558462000932816200181c565b9550508260010192505050620007c6565b805160008190036200099b5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002b8b8339815191526001600160a01b03841662000a075760405162461bcd60e51b815260206004820152602c602482015260008051602062002bd383398151915260448201526b65206164647265737328302960a01b606482015260840162000236565b6001600160a01b0384166000908152600182016020526040812054906001600160601b038216900362000a405762000a40828662000dfe565b60005b838110156200049957600085828151811062000a635762000a636200166b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908816810362000b105760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606482015260840162000236565b62000b1d85828462000e6b565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558d168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000bc1816200181c565b945050826001019250505062000a43565b805160000362000c285760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002b8b833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b0385161562000cc75760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d757374206265206164647265737328302900000000000000000000606482015260840162000236565b835160005b8181101562000dc457600086828151811062000cec5762000cec6200166b565b60200260200101519050846001600160e01b031916816001600160e01b0319161415801562000d2857506001600160e01b031981811690851614155b62000d895760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b606482015260840162000236565b6001600160e01b031981166000908152602087905260409020546001600160a01b031662000db987828462000e6b565b505060010162000ccc565b50505050505050565b806001600160a01b0383163b62000df95760405162461bcd60e51b8152600401620002369190620017ea565b505050565b62000e238160405180606001604052806024815260200162002bf36024913962000dcd565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160a01b03821662000ee95760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606482015260840162000236565b306001600160a01b0383160362000f5a5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b606482015260840162000236565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b0316929162000fab916200184d565b9050808214620010a4576001600160a01b0384166000908152600186016020526040812080548390811062000fe45762000fe46200166b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106200103857620010386200166b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480620010d057620010d062001869565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b031985168252869052604081208190558190036200124557600285015460009062001136906001906200184d565b6001600160a01b0386166000908152600180890160205260409091200154909150808214620011ec5760008760020183815481106200117957620011796200166b565b6000918252602090912001546002890180546001600160a01b039092169250829184908110620011ad57620011ad6200166b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548062001202576200120262001869565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b80516001600160a01b03811681146200126457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620012a457620012a462001269565b60405290565b604051606081016001600160401b0381118282101715620012a457620012a462001269565b604051601f8201601f191681016001600160401b0381118282101715620012fa57620012fa62001269565b604052919050565b60006001600160401b038211156200131e576200131e62001269565b5060051b60200190565b60005b83811015620013455781810151838201526020016200132b565b50506000910152565b6000601f83818401126200136157600080fd5b825160206200137a620013748362001302565b620012cf565b82815260059290921b850181019181810190878411156200139a57600080fd5b8287015b848110156200148b5780516001600160401b0380821115620013c05760008081fd5b908901906040601f19838d038101821315620013dc5760008081fd5b620013e66200127f565b620013f38986016200124c565b81528285015184811115620014085760008081fd5b8086019550508d603f8601126200141f5760008081fd5b888501518481111562001436576200143662001269565b620014478a848e84011601620012cf565b94508085528e848288010111156200146157600092508283fd5b62001472818b870186890162001328565b508089019390935250508452509183019183016200139e565b50979650505050505050565b600080600060608486031215620014ad57600080fd5b620014b8846200124c565b60208501519093506001600160401b0380821115620014d657600080fd5b818601915086601f830112620014eb57600080fd5b8151620014fc620013748262001302565b8082825260208201915060208360051b8601019250898311156200151f57600080fd5b602085015b8381101562001637578051858111156200153d57600080fd5b86016060818d03601f190112156200155457600080fd5b6200155e620012aa565b6200156c602083016200124c565b81526040820151600381106200158157600080fd5b60208201526060820151878111156200159957600080fd5b8083019250508c603f830112620015af57600080fd5b6020820151620015c3620013748262001302565b81815260059190911b83016040019060208101908f831115620015e557600080fd5b6040850194505b82851015620016205784516001600160e01b0319811681146200160e57600080fd5b825260209485019490910190620015ec565b604084015250508452506020928301920162001524565b50604089015190965093505050808211156200165257600080fd5b5062001661868287016200134e565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60008151808452620016b181602086016020860162001328565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156200179a57898403607f19018652815180516001600160a01b031685528381015189860190600381106200173657634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620017845783516001600160e01b031916825292860192600192909201919086019062001758565b50978501979550505090820190600101620016ee565b50506001600160a01b038a16908801528681036040880152620017be818962001697565b9a9950505050505050505050565b60008251620017e081846020870162001328565b9190910192915050565b602081526000620017ff602083018462001697565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038281166002600160601b0319810162001843576200184362001806565b6001019392505050565b8181038181111562001863576200186362001806565b92915050565b634e487b7160e01b600052603160045260246000fd5b6112fc806200188f6000396000f3fe60806040523661000b57005b600080356001600160e01b031916815260008051602061125b833981519152602081905260409091205481906001600160a01b03168061005e57604051638249a7f160e01b815260040160405180910390fd5b3660008037600080366000845af43d6000803e80801561007d573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602061125b833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602061125b833981519152906000906101379086908690869060200161100c565b60408051601f1981840301815291905280516020909101206002830154909150156101e0576000818152600583016020526040902054801580159061017c5750428111155b6101cd5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c617073656400000060448201526064015b60405180910390fd5b5060008181526005830160205260408120555b845160005b8181101561039d5760008782815181106102015761020161110c565b60200260200101516020015190506000600281111561022257610222610fa6565b81600281111561023457610234610fa6565b036102825761027d88838151811061024e5761024e61110c565b60200260200101516000015189848151811061026c5761026c61110c565b6020026020010151604001516105fe565b610394565b600181600281111561029657610296610fa6565b036102df5761027d8883815181106102b0576102b061110c565b6020026020010151600001518984815181106102ce576102ce61110c565b60200260200101516040015161076f565b60028160028111156102f3576102f3610fa6565b0361033c5761027d88838151811061030d5761030d61110c565b60200260200101516000015189848151811061032b5761032b61110c565b6020026020010151604001516108f8565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084016101c4565b506001016101e5565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516103d19392919061100c565b60405180910390a16103e385856103eb565b505050505050565b6001600160a01b0382166104725780511561046e5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016101c4565b5050565b80516000036104e95760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016101c4565b6001600160a01b038216301461051b5761051b8260405180606001604052806028815260200161127b60289139610aaa565b600080836001600160a01b0316836040516105369190611122565b600060405180830381855af49150503d8060008114610571576040519150601f19603f3d011682016040523d82523d6000602084013e610576565b606091505b5091509150816105f8578051156105a1578060405162461bcd60e51b81526004016101c4919061113e565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b60648201526084016101c4565b50505050565b805160000361061f5760405162461bcd60e51b81526004016101c490611158565b60008051602061125b8339815191526001600160a01b0383166106545760405162461bcd60e51b81526004016101c4906111a3565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361068a5761068a8285610ad8565b825160005b818110156103e35760008582815181106106ab576106ab61110c565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156107495760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b60648201526084016101c4565b6107558683878b610b42565b8461075f81611205565b955050826001019250505061068f565b805160008190036107925760405162461bcd60e51b81526004016101c490611158565b60008051602061125b8339815191526001600160a01b0384166107c75760405162461bcd60e51b81526004016101c4906111a3565b6001600160a01b0384166000908152600182016020526040812054906001600160601b03821690036107fd576107fd8286610ad8565b60005b838110156103e357600085828151811061081c5761081c61110c565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036108c75760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016101c4565b6108d2858284610be2565b6108de8583868b610b42565b836108e881611205565b9450508260010192505050610800565b80516000036109195760405162461bcd60e51b81526004016101c490611158565b60008051602061125b833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b038516156109ae5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b60648201526084016101c4565b835160005b81811015610aa15760008682815181106109cf576109cf61110c565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610a0a57506001600160e01b031981811690851614155b610a695760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b60648201526084016101c4565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610a97878284610be2565b50506001016109b3565b50505050505050565b806001600160a01b0383163b610ad35760405162461bcd60e51b81526004016101c4919061113e565b505050565b610afa816040518060600160405280602481526020016112a360249139610aaa565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610c5e5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016101c4565b306001600160a01b03831603610ccd5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b60648201526084016101c4565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610d1c9161122b565b9050808214610e0e576001600160a01b03841660009081526001860160205260408120805483908110610d5157610d5161110c565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610da257610da261110c565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610e3757610e37611244565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610f9f576002850154600090610e9a9060019061122b565b6001600160a01b0386166000908152600180890160205260409091200154909150808214610f49576000876002018381548110610ed957610ed961110c565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610f0a57610f0a61110c565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480610f5c57610f5c611244565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b634e487b7160e01b600052602160045260246000fd5b60005b83811015610fd7578181015183820152602001610fbf565b50506000910152565b60008151808452610ff8816020860160208601610fbc565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156110dc57898403607f19018652815180516001600160a01b0316855283810151898601906003811061107b57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156110c75783516001600160e01b031916825292860192600192909201919086019061109d565b50978501979550505090820190600101611035565b50506001600160a01b038a169088015286810360408801526110fe8189610fe0565b9a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60008251611134818460208701610fbc565b9190910192915050565b6020815260006111516020830184610fe0565b9392505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818103611221576112216111ef565b6001019392505050565b8181038181111561123e5761123e6111ef565b92915050565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212203652c21053e43acbcef46f6389d6dc2a2b51f63877f2870257da4a1fab635c4564736f6c63430008110033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64654c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", + "deployedBytecode": "0x60806040523661000b57005b600080356001600160e01b031916815260008051602061125b833981519152602081905260409091205481906001600160a01b03168061005e57604051638249a7f160e01b815260040160405180910390fd5b3660008037600080366000845af43d6000803e80801561007d573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602061125b833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602061125b833981519152906000906101379086908690869060200161100c565b60408051601f1981840301815291905280516020909101206002830154909150156101e0576000818152600583016020526040902054801580159061017c5750428111155b6101cd5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c617073656400000060448201526064015b60405180910390fd5b5060008181526005830160205260408120555b845160005b8181101561039d5760008782815181106102015761020161110c565b60200260200101516020015190506000600281111561022257610222610fa6565b81600281111561023457610234610fa6565b036102825761027d88838151811061024e5761024e61110c565b60200260200101516000015189848151811061026c5761026c61110c565b6020026020010151604001516105fe565b610394565b600181600281111561029657610296610fa6565b036102df5761027d8883815181106102b0576102b061110c565b6020026020010151600001518984815181106102ce576102ce61110c565b60200260200101516040015161076f565b60028160028111156102f3576102f3610fa6565b0361033c5761027d88838151811061030d5761030d61110c565b60200260200101516000015189848151811061032b5761032b61110c565b6020026020010151604001516108f8565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084016101c4565b506001016101e5565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516103d19392919061100c565b60405180910390a16103e385856103eb565b505050505050565b6001600160a01b0382166104725780511561046e5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016101c4565b5050565b80516000036104e95760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016101c4565b6001600160a01b038216301461051b5761051b8260405180606001604052806028815260200161127b60289139610aaa565b600080836001600160a01b0316836040516105369190611122565b600060405180830381855af49150503d8060008114610571576040519150601f19603f3d011682016040523d82523d6000602084013e610576565b606091505b5091509150816105f8578051156105a1578060405162461bcd60e51b81526004016101c4919061113e565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b60648201526084016101c4565b50505050565b805160000361061f5760405162461bcd60e51b81526004016101c490611158565b60008051602061125b8339815191526001600160a01b0383166106545760405162461bcd60e51b81526004016101c4906111a3565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361068a5761068a8285610ad8565b825160005b818110156103e35760008582815181106106ab576106ab61110c565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156107495760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b60648201526084016101c4565b6107558683878b610b42565b8461075f81611205565b955050826001019250505061068f565b805160008190036107925760405162461bcd60e51b81526004016101c490611158565b60008051602061125b8339815191526001600160a01b0384166107c75760405162461bcd60e51b81526004016101c4906111a3565b6001600160a01b0384166000908152600182016020526040812054906001600160601b03821690036107fd576107fd8286610ad8565b60005b838110156103e357600085828151811061081c5761081c61110c565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036108c75760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016101c4565b6108d2858284610be2565b6108de8583868b610b42565b836108e881611205565b9450508260010192505050610800565b80516000036109195760405162461bcd60e51b81526004016101c490611158565b60008051602061125b833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b038516156109ae5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b60648201526084016101c4565b835160005b81811015610aa15760008682815181106109cf576109cf61110c565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610a0a57506001600160e01b031981811690851614155b610a695760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b60648201526084016101c4565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610a97878284610be2565b50506001016109b3565b50505050505050565b806001600160a01b0383163b610ad35760405162461bcd60e51b81526004016101c4919061113e565b505050565b610afa816040518060600160405280602481526020016112a360249139610aaa565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610c5e5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016101c4565b306001600160a01b03831603610ccd5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b60648201526084016101c4565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610d1c9161122b565b9050808214610e0e576001600160a01b03841660009081526001860160205260408120805483908110610d5157610d5161110c565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610da257610da261110c565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610e3757610e37611244565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610f9f576002850154600090610e9a9060019061122b565b6001600160a01b0386166000908152600180890160205260409091200154909150808214610f49576000876002018381548110610ed957610ed961110c565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610f0a57610f0a61110c565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480610f5c57610f5c611244565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b634e487b7160e01b600052602160045260246000fd5b60005b83811015610fd7578181015183820152602001610fbf565b50506000910152565b60008151808452610ff8816020860160208601610fbc565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156110dc57898403607f19018652815180516001600160a01b0316855283810151898601906003811061107b57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156110c75783516001600160e01b031916825292860192600192909201919086019061109d565b50978501979550505090820190600101611035565b50506001600160a01b038a169088015286810360408801526110fe8189610fe0565b9a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60008251611134818460208701610fbc565b9190910192915050565b6020815260006111516020830184610fe0565b9392505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818103611221576112216111ef565b6001019392505050565b8181038181111561123e5761123e6111ef565b92915050565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212203652c21053e43acbcef46f6389d6dc2a2b51f63877f2870257da4a1fab635c4564736f6c63430008110033", + "facets": [ + { + "facetAddress": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", + "functionSelectors": [ + "0x1506e463", + "0x60062091", + "0x80dc2248", + "0x9b598519", + "0x57bd0a32", + "0xae8bc0de", + "0x2c1999d0", + "0xbd8671a7", + "0x1ecf6f9f", + "0xad4c7771", + "0x949de969", + "0x07a38d7b", + "0xf1537686", + "0x5a2164e5", + "0xa1b19301", + "0x03e418c2", + "0xb64a5e07", + "0xe1cb3958", + "0xc4058429", + "0xe9d7bcec" + ] + }, + { + "facetAddress": "0x912541Ad966244F278c997E34F80A33AFF9B2857", + "functionSelectors": [ + "0x8a336231", + "0x159e041f", + "0x2424401f", + "0x59efa162", + "0xc2fb26a6", + "0xb49c53a7", + "0x63e3e7d2", + "0xcb8058ba", + "0x54126711", + "0xaffed0e0", + "0x121cca31", + "0x6989ca7c", + "0x1a8bc0e1", + "0x41bdc8b5", + "0xbfd79030", + "0x3339df96", + "0x8aac16ba", + "0x93f18ac5", + "0x674dc933", + "0x91f5de79" + ] + }, + { + "facetAddress": "0x5efE4a498a9b4Ea0DC86e1772A17Dc62Ab4105AD", + "functionSelectors": [ + "0xab2dc3f5" + ] + }, + { + "facetAddress": "0xF28Eeca075D63886C6152672b926CF89d9782780", + "functionSelectors": [ + "0xc5b350df", + "0xbb271a27", + "0x2ec0c002", + "0xa9943b1b", + "0x6a42b8f8", + "0x8da5cb5b", + "0x8456cb59", + "0x5c975abb", + "0xb1f8100d", + "0xc56ce358", + "0xd1851c92", + "0x3cf52ffb", + "0xc91cb56a", + "0x23986f7d", + "0x80e52e3f", + "0x6be55785", + "0x12232937", + "0x3f4ba83a" + ] + }, + { + "facetAddress": "0x04B83cdACB4D6548aC583AFdEF6677128A789428", + "functionSelectors": [ + "0xa03e4bc3", + "0xef1eb0c1", + "0x09d7ba54", + "0xd1e5f31c", + "0xb3f62fcb", + "0x75d32371", + "0x349f937c", + "0x3bd30d34" + ] + }, + { + "facetAddress": "0x5cC220030AFf5a2068A62FEaC09553f0B6604f60", + "functionSelectors": [ + "0xdd39f00d", + "0x8cba8b6a", + "0x65bc8582", + "0x60f0a5ac", + "0xf01b3e01" + ] + }, + { + "facetAddress": "0x97477e71B0dacd9581bf43bEcC1DB95d6b0A998E", + "functionSelectors": [ + "0x4b72c5da", + "0x0951d6d8", + "0x09935b8f", + "0x54064594", + "0x2d3f9ef6", + "0xf259cd27", + "0xda3a892f", + "0x3b688da6", + "0x12d57170", + "0x1407093b", + "0x8770e682", + "0xe9160f3e", + "0xc6bf691d", + "0xb214c901", + "0x9bf6d875", + "0x22a3c007", + "0xf72c5048", + "0xfd5bd5fe", + "0x41258b5c", + "0x582c78d2", + "0x82904716", + "0xffaf3f1a", + "0x911b8ee2", + "0x04376ff4" + ] + }, + { + "facetAddress": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", + "functionSelectors": [ + "0x8d365457", + "0xa02288f4", + "0x29d99b10", + "0x8f11d27f", + "0x76ca2e52", + "0xd251dc35", + "0x7652f59d", + "0x1301caa2", + "0x8b480b12", + "0x2d91a515", + "0xb3a4eab4", + "0xbb0577eb", + "0xad94911b", + "0xf495e807", + "0x4bbcba8e", + "0x241ca57a", + "0xb6618dff", + "0xff126de9", + "0x80b297e8", + "0x74c6b89b" + ] + }, + { + "facetAddress": "0x273c33499f774D2C2466ef95352A7016474C43ee", + "functionSelectors": [ + "0xea027c2f", + "0xe5f6220f", + "0x4b141bb4", + "0x2bf63bcc", + "0x1963e426", + "0x3e74aea0", + "0x9c8eab97", + "0x43be5eaf", + "0x72a30e08", + "0x8dc51484", + "0xa1a23c29" + ] + }, + { + "facetAddress": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", + "functionSelectors": [ + "0x1f931c1c", + "0x56a8ea48", + "0xbbf2358e", + "0x2c67849c" + ] + }, + { + "facetAddress": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", + "functionSelectors": [ + "0x9a7e155e" + ] + }, + { + "facetAddress": "0x3Bcf4185443A339517aD4e580067f178d1B68E1D", + "functionSelectors": [ + "0xcdffacc6", + "0x52ef6b2c", + "0xadfca15e", + "0x7a0ed627", + "0x01ffc9a7" + ] + } + ], + "execute": { + "methodName": "init", + "args": [ + 1718772088, + "0x9963a1E4fD60ba4a89E92930c8D8686514705BB6", + 0, + "0x0296da2Ce82eb3B98eB05925bC5777C7dA0d0F09" + ] + }, + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_contractOwner": "the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.", + "_diamondCut": "the list of facet to add", + "_initializations": "the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "constructor": { + "notice": "This construct a diamond contract" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/ConnextStaging_DiamondProxy.json b/packages/deployments/contracts/deployments/fraxtal/ConnextStaging_DiamondProxy.json new file mode 100644 index 0000000000..6ee50598cd --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/ConnextStaging_DiamondProxy.json @@ -0,0 +1,6470 @@ +{ + "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_contractOwner", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "initContract", + "type": "address" + }, + { + "internalType": "bytes", + "name": "initData", + "type": "bytes" + } + ], + "internalType": "struct ConnextDiamond.Initialization[]", + "name": "_initializations", + "type": "tuple[]" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ConnextDiamond__fallback_facetNotExit", + "type": "error" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badBurn", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badMint", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_invalidParams", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_remainsCustodied", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_representationListed", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_localNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_onlyRemote", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "adoptedAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "localAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cap", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "swapPool", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "StableSwapAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "representation", + "type": "address" + } + ], + "name": "TokenDeployed", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "addStableSwapPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_adopted", + "type": "address" + } + ], + "name": "adoptedToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "getCustodiedAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "getLocalAndAdoptedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_candidate", + "type": "address" + } + ], + "name": "getTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "representationToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "_canonicalDecimals", + "type": "uint8" + }, + { + "internalType": "string", + "name": "_representationName", + "type": "string" + }, + { + "internalType": "string", + "name": "_representationSymbol", + "type": "string" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_cap", + "type": "uint256" + } + ], + "name": "setupAsset", + "outputs": [ + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "setupAssetWithDeployedRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "updateDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "updateLiquidityCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addRemote_invalidRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__addSequencer_invalidSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_noRelayerVault", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__bumpTransfer_valueIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__excecute_insufficientGas", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_badFastLiquidityStatus", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_externalCallFailed", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidRouterSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_invalidSequencerSignature", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_maxRoutersExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notApprovedForPortals", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_notSupportedSequencer", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_unapprovedSender", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__execute_wrongDomain", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceReceiveLocal_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__forceUpdateSlippage_notDestination", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__onlyDelegate_notDelegate", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__removeSequencer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_emptyTo", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_invalidSlippage", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet__xcall_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BridgeFacet_xcall__emptyLocalAsset", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "AavePortalMintUnbacked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct ExecuteArgs", + "name": "args", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "ExternalCalldataExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + } + ], + "name": "ForceReceiveLocal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "remote", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RemoteAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SequencerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ], + "name": "SlippageUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "increase", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "TransferRelayerFeesIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "XAppConnectionManagerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "messageHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "indexed": false, + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "messageBody", + "type": "bytes" + } + ], + "name": "XCalled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "addSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "approvedSequencers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_relayerFeeAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "bumpTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "domain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_router", + "type": "bytes32" + } + ], + "name": "enrollRemoteRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "params", + "type": "tuple" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "routerSignatures", + "type": "bytes[]" + }, + { + "internalType": "address", + "name": "sequencer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "sequencerSignature", + "type": "bytes" + } + ], + "internalType": "struct ExecuteArgs", + "name": "_args", + "type": "tuple" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + } + ], + "name": "forceReceiveLocal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + } + ], + "name": "forceUpdateSlippage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "remote", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sequencer", + "type": "address" + } + ], + "name": "removeSequencer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "routedTransfers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + } + ], + "name": "setXAppConnectionManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "transferStatus", + "outputs": [ + { + "internalType": "enum DestinationTransferStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "xAppConnectionManager", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcall", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_relayerFee", + "type": "uint256" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destination", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + }, + { + "internalType": "address", + "name": "_delegate", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippage", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_callData", + "type": "bytes" + } + ], + "name": "xcallIntoLocal", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "InboxFacet__handle_notTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyRemoteRouter_notRemote", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyReplica_notReplica", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_alreadyReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_noPortalRouter", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "actual", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "TypedMemView__assertType_typeAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__assertValid_validityAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "originAndNonce", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Receive", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Reconciled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_origin", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_nonce", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + } + ], + "name": "handle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__revokeRole_invalidInput", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "AssignRoleAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "AssignRoleRouter", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "AssignRoleWatcher", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "revokedAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum Role", + "name": "revokedRole", + "type": "uint8" + } + ], + "name": "RevokeRole", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "RouterAllowlistRemovalProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "renounced", + "type": "bool" + } + ], + "name": "RouterAllowlistRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "name": "assignRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "assignRoleRouterAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "assignRoleWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposeRouterAllowlistRemoval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_role", + "type": "address" + } + ], + "name": "queryRole", + "outputs": [ + { + "internalType": "enum Role", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeRouterAllowlist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_revoke", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistRemoved", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_invalidAsset", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_zeroAmount", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_assetNotApproved", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__setAavePortalFee_invalidFee", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePoolUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalRepayment", + "type": "event" + }, + { + "inputs": [], + "name": "aavePool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "aavePortalFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalFeeDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxIn", + "type": "uint256" + } + ], + "name": "repayAavePortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_portalAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + } + ], + "name": "repayAavePortalFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_aavePool", + "type": "address" + } + ], + "name": "setAavePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_aavePortalFeeNumerator", + "type": "uint256" + } + ], + "name": "setAavePortalFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "RelayerFacet__addRelayer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__removeRelayer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerFeeVaultUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "addRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "approvedRelayers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "relayerFeeVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "removeRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayerFeeVault", + "type": "address" + } + ], + "name": "setRelayerFeeVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__initializeRouter_configNotEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_notNewOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterOwner_noChange", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterRecipient_notNewRecipient", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouterForPortal_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_routerEmpty", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "liquidityFeeNumerator", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityFeeNumeratorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxRoutersPerTransfer", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MaxRoutersPerTransferUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterApprovedForPortal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "RouterInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "RouterOwnerAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevProposed", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newProposed", + "type": "address" + } + ], + "name": "RouterOwnerProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevRecipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newRecipient", + "type": "address" + } + ], + "name": "RouterRecipientSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterUnapprovedForPortal", + "type": "event" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_NUMERATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "acceptProposedRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "name": "addRouterLiquidity", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "addRouterLiquidityFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwnerTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApprovalForPortal", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "initializeRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxRoutersPerTransfer", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_proposed", + "type": "address" + } + ], + "name": "proposeRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + } + ], + "name": "removeRouterLiquidity", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "removeRouterLiquidityFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "routerBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_numerator", + "type": "uint256" + } + ], + "name": "setLiquidityFeeNumerator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newMaxRouters", + "type": "uint256" + } + ], + "name": "setMaxRoutersPerTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "setRouterRecipient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenIndex_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapToken_outOfRange", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "AddLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "NewSwapFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidityImbalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "boughtId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + } + ], + "name": "RemoveLiquidityOne", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensSold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "soldId", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "boughtId", + "type": "uint128" + } + ], + "name": "TokenSwap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addSwapLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateRemoveSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + } + ], + "name": "calculateRemoveSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "availableTokenAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + } + ], + "name": "calculateSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "deposit", + "type": "bool" + } + ], + "name": "calculateSwapTokenAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapA", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapAPrecise", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSwapAdminBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapLPToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapStorage", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "internalType": "struct SwapUtils.Swap", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } + ], + "name": "getSwapTokenIndex", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapVirtualPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "maxBurnAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityImbalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "minAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minDy", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExact", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_alreadyDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_aExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_duplicateTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_feeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notDisabledPool", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LPTokenTargetUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SwapUtils.Swap", + "name": "swap", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "disableSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "_pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "string", + "name": "lpTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "lpTokenSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_adminFee", + "type": "uint256" + } + ], + "name": "initializeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lpTokenTargetAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + } + ], + "name": "rampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "removeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "setSwapAdminFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "setSwapFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "stopRampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "updateLpTokenTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "withdrawSwapAdminFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "DiamondCutProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCutRescinded", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "getAcceptanceTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "proposeDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "rescindDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "DiamondInit__init_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "DiamondInit__init_domainsDontMatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_acceptanceDelay", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_lpTokenTargetAddress", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "facetFunctionSelectors_", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x6a8c1a894c2d277685fd17a4e4ff4a67e287572358ae95f92a8a9a17b151f5b2", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "transactionIndex": 1, + "gasUsed": "6265178", + "logsBloom": "0x00000000000000000000000000000000000000000000400000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000001000100000800000000000000000000020000000000000000000800000000000000000000000000000000400020000000000000000000010000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xddd466c0bd25677104f9d3e8d36ed4bb95e953aee484abb3d2efde8701210dde", + "transactionHash": "0x6a8c1a894c2d277685fd17a4e4ff4a67e287572358ae95f92a8a9a17b151f5b2", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2894868, + "transactionHash": "0x6a8c1a894c2d277685fd17a4e4ff4a67e287572358ae95f92a8a9a17b151f5b2", + "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xddd466c0bd25677104f9d3e8d36ed4bb95e953aee484abb3d2efde8701210dde" + }, + { + "transactionIndex": 1, + "blockNumber": 2894868, + "transactionHash": "0x6a8c1a894c2d277685fd17a4e4ff4a67e287572358ae95f92a8a9a17b151f5b2", + "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", + "topics": [ + "0x8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001920000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000480000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000008200000000000000000000000000000000000000000000000000000000000000ae00000000000000000000000000000000000000000000000000000000000000c600000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000015e000000000000000000000000000000000000000000000000000000000000016e0000000000000000000000000000000000000000000000000000000000000178000000000000000000000000062b3a7d4d1cc43187c950a2c80253e5cb67765cd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000141506e46300000000000000000000000000000000000000000000000000000000600620910000000000000000000000000000000000000000000000000000000080dc2248000000000000000000000000000000000000000000000000000000009b5985190000000000000000000000000000000000000000000000000000000057bd0a3200000000000000000000000000000000000000000000000000000000ae8bc0de000000000000000000000000000000000000000000000000000000002c1999d000000000000000000000000000000000000000000000000000000000bd8671a7000000000000000000000000000000000000000000000000000000001ecf6f9f00000000000000000000000000000000000000000000000000000000ad4c777100000000000000000000000000000000000000000000000000000000949de9690000000000000000000000000000000000000000000000000000000007a38d7b00000000000000000000000000000000000000000000000000000000f1537686000000000000000000000000000000000000000000000000000000005a2164e500000000000000000000000000000000000000000000000000000000a1b193010000000000000000000000000000000000000000000000000000000003e418c200000000000000000000000000000000000000000000000000000000b64a5e0700000000000000000000000000000000000000000000000000000000e1cb395800000000000000000000000000000000000000000000000000000000c405842900000000000000000000000000000000000000000000000000000000e9d7bcec00000000000000000000000000000000000000000000000000000000000000000000000000000000912541ad966244f278c997e34f80a33aff9b28570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000148a33623100000000000000000000000000000000000000000000000000000000159e041f000000000000000000000000000000000000000000000000000000002424401f0000000000000000000000000000000000000000000000000000000059efa16200000000000000000000000000000000000000000000000000000000c2fb26a600000000000000000000000000000000000000000000000000000000b49c53a70000000000000000000000000000000000000000000000000000000063e3e7d200000000000000000000000000000000000000000000000000000000cb8058ba000000000000000000000000000000000000000000000000000000005412671100000000000000000000000000000000000000000000000000000000affed0e000000000000000000000000000000000000000000000000000000000121cca31000000000000000000000000000000000000000000000000000000006989ca7c000000000000000000000000000000000000000000000000000000001a8bc0e10000000000000000000000000000000000000000000000000000000041bdc8b500000000000000000000000000000000000000000000000000000000bfd79030000000000000000000000000000000000000000000000000000000003339df96000000000000000000000000000000000000000000000000000000008aac16ba0000000000000000000000000000000000000000000000000000000093f18ac500000000000000000000000000000000000000000000000000000000674dc9330000000000000000000000000000000000000000000000000000000091f5de79000000000000000000000000000000000000000000000000000000000000000000000000000000005efe4a498a9b4ea0dc86e1772a17dc62ab4105ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001ab2dc3f500000000000000000000000000000000000000000000000000000000000000000000000000000000f28eeca075d63886c6152672b926cf89d9782780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000012c5b350df00000000000000000000000000000000000000000000000000000000bb271a27000000000000000000000000000000000000000000000000000000002ec0c00200000000000000000000000000000000000000000000000000000000a9943b1b000000000000000000000000000000000000000000000000000000006a42b8f8000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000008456cb59000000000000000000000000000000000000000000000000000000005c975abb00000000000000000000000000000000000000000000000000000000b1f8100d00000000000000000000000000000000000000000000000000000000c56ce35800000000000000000000000000000000000000000000000000000000d1851c92000000000000000000000000000000000000000000000000000000003cf52ffb00000000000000000000000000000000000000000000000000000000c91cb56a0000000000000000000000000000000000000000000000000000000023986f7d0000000000000000000000000000000000000000000000000000000080e52e3f000000000000000000000000000000000000000000000000000000006be557850000000000000000000000000000000000000000000000000000000012232937000000000000000000000000000000000000000000000000000000003f4ba83a0000000000000000000000000000000000000000000000000000000000000000000000000000000004b83cdacb4d6548ac583afdef6677128a789428000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000008a03e4bc300000000000000000000000000000000000000000000000000000000ef1eb0c10000000000000000000000000000000000000000000000000000000009d7ba5400000000000000000000000000000000000000000000000000000000d1e5f31c00000000000000000000000000000000000000000000000000000000b3f62fcb0000000000000000000000000000000000000000000000000000000075d3237100000000000000000000000000000000000000000000000000000000349f937c000000000000000000000000000000000000000000000000000000003bd30d34000000000000000000000000000000000000000000000000000000000000000000000000000000005cc220030aff5a2068a62feac09553f0b6604f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005dd39f00d000000000000000000000000000000000000000000000000000000008cba8b6a0000000000000000000000000000000000000000000000000000000065bc85820000000000000000000000000000000000000000000000000000000060f0a5ac00000000000000000000000000000000000000000000000000000000f01b3e010000000000000000000000000000000000000000000000000000000000000000000000000000000097477e71b0dacd9581bf43becc1db95d6b0a998e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000184b72c5da000000000000000000000000000000000000000000000000000000000951d6d80000000000000000000000000000000000000000000000000000000009935b8f0000000000000000000000000000000000000000000000000000000054064594000000000000000000000000000000000000000000000000000000002d3f9ef600000000000000000000000000000000000000000000000000000000f259cd2700000000000000000000000000000000000000000000000000000000da3a892f000000000000000000000000000000000000000000000000000000003b688da60000000000000000000000000000000000000000000000000000000012d57170000000000000000000000000000000000000000000000000000000001407093b000000000000000000000000000000000000000000000000000000008770e68200000000000000000000000000000000000000000000000000000000e9160f3e00000000000000000000000000000000000000000000000000000000c6bf691d00000000000000000000000000000000000000000000000000000000b214c901000000000000000000000000000000000000000000000000000000009bf6d8750000000000000000000000000000000000000000000000000000000022a3c00700000000000000000000000000000000000000000000000000000000f72c504800000000000000000000000000000000000000000000000000000000fd5bd5fe0000000000000000000000000000000000000000000000000000000041258b5c00000000000000000000000000000000000000000000000000000000582c78d2000000000000000000000000000000000000000000000000000000008290471600000000000000000000000000000000000000000000000000000000ffaf3f1a00000000000000000000000000000000000000000000000000000000911b8ee20000000000000000000000000000000000000000000000000000000004376ff400000000000000000000000000000000000000000000000000000000000000000000000000000000194a79b1ee4da43d30ce8a35a32abceabe641ad20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000148d36545700000000000000000000000000000000000000000000000000000000a02288f40000000000000000000000000000000000000000000000000000000029d99b10000000000000000000000000000000000000000000000000000000008f11d27f0000000000000000000000000000000000000000000000000000000076ca2e5200000000000000000000000000000000000000000000000000000000d251dc35000000000000000000000000000000000000000000000000000000007652f59d000000000000000000000000000000000000000000000000000000001301caa2000000000000000000000000000000000000000000000000000000008b480b12000000000000000000000000000000000000000000000000000000002d91a51500000000000000000000000000000000000000000000000000000000b3a4eab400000000000000000000000000000000000000000000000000000000bb0577eb00000000000000000000000000000000000000000000000000000000ad94911b00000000000000000000000000000000000000000000000000000000f495e807000000000000000000000000000000000000000000000000000000004bbcba8e00000000000000000000000000000000000000000000000000000000241ca57a00000000000000000000000000000000000000000000000000000000b6618dff00000000000000000000000000000000000000000000000000000000ff126de90000000000000000000000000000000000000000000000000000000080b297e80000000000000000000000000000000000000000000000000000000074c6b89b00000000000000000000000000000000000000000000000000000000000000000000000000000000273c33499f774d2c2466ef95352a7016474c43ee00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000bea027c2f00000000000000000000000000000000000000000000000000000000e5f6220f000000000000000000000000000000000000000000000000000000004b141bb4000000000000000000000000000000000000000000000000000000002bf63bcc000000000000000000000000000000000000000000000000000000001963e426000000000000000000000000000000000000000000000000000000003e74aea0000000000000000000000000000000000000000000000000000000009c8eab970000000000000000000000000000000000000000000000000000000043be5eaf0000000000000000000000000000000000000000000000000000000072a30e08000000000000000000000000000000000000000000000000000000008dc5148400000000000000000000000000000000000000000000000000000000a1a23c2900000000000000000000000000000000000000000000000000000000000000000000000000000000324c5834cd3bd19c4991f4fc5b3a0ff5257a692b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000041f931c1c0000000000000000000000000000000000000000000000000000000056a8ea4800000000000000000000000000000000000000000000000000000000bbf2358e000000000000000000000000000000000000000000000000000000002c67849c0000000000000000000000000000000000000000000000000000000000000000000000000000000018ece1437793f7a786ef4e32d9f6c239890a7d9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000019a7e155e000000000000000000000000000000000000000000000000000000000000000000000000000000003bcf4185443a339517ad4e580067f178d1b68e1d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed6270000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 1, + "blockHash": "0xddd466c0bd25677104f9d3e8d36ed4bb95e953aee484abb3d2efde8701210dde" + } + ], + "blockNumber": 2894868, + "cumulativeGasUsed": "6332840", + "status": 1, + "byzantium": true + }, + "args": [ + "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + [ + { + "facetAddress": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", + "functionSelectors": [ + "0x1506e463", + "0x60062091", + "0x80dc2248", + "0x9b598519", + "0x57bd0a32", + "0xae8bc0de", + "0x2c1999d0", + "0xbd8671a7", + "0x1ecf6f9f", + "0xad4c7771", + "0x949de969", + "0x07a38d7b", + "0xf1537686", + "0x5a2164e5", + "0xa1b19301", + "0x03e418c2", + "0xb64a5e07", + "0xe1cb3958", + "0xc4058429", + "0xe9d7bcec" + ], + "action": 0 + }, + { + "facetAddress": "0x912541Ad966244F278c997E34F80A33AFF9B2857", + "functionSelectors": [ + "0x8a336231", + "0x159e041f", + "0x2424401f", + "0x59efa162", + "0xc2fb26a6", + "0xb49c53a7", + "0x63e3e7d2", + "0xcb8058ba", + "0x54126711", + "0xaffed0e0", + "0x121cca31", + "0x6989ca7c", + "0x1a8bc0e1", + "0x41bdc8b5", + "0xbfd79030", + "0x3339df96", + "0x8aac16ba", + "0x93f18ac5", + "0x674dc933", + "0x91f5de79" + ], + "action": 0 + }, + { + "facetAddress": "0x5efE4a498a9b4Ea0DC86e1772A17Dc62Ab4105AD", + "functionSelectors": [ + "0xab2dc3f5" + ], + "action": 0 + }, + { + "facetAddress": "0xF28Eeca075D63886C6152672b926CF89d9782780", + "functionSelectors": [ + "0xc5b350df", + "0xbb271a27", + "0x2ec0c002", + "0xa9943b1b", + "0x6a42b8f8", + "0x8da5cb5b", + "0x8456cb59", + "0x5c975abb", + "0xb1f8100d", + "0xc56ce358", + "0xd1851c92", + "0x3cf52ffb", + "0xc91cb56a", + "0x23986f7d", + "0x80e52e3f", + "0x6be55785", + "0x12232937", + "0x3f4ba83a" + ], + "action": 0 + }, + { + "facetAddress": "0x04B83cdACB4D6548aC583AFdEF6677128A789428", + "functionSelectors": [ + "0xa03e4bc3", + "0xef1eb0c1", + "0x09d7ba54", + "0xd1e5f31c", + "0xb3f62fcb", + "0x75d32371", + "0x349f937c", + "0x3bd30d34" + ], + "action": 0 + }, + { + "facetAddress": "0x5cC220030AFf5a2068A62FEaC09553f0B6604f60", + "functionSelectors": [ + "0xdd39f00d", + "0x8cba8b6a", + "0x65bc8582", + "0x60f0a5ac", + "0xf01b3e01" + ], + "action": 0 + }, + { + "facetAddress": "0x97477e71B0dacd9581bf43bEcC1DB95d6b0A998E", + "functionSelectors": [ + "0x4b72c5da", + "0x0951d6d8", + "0x09935b8f", + "0x54064594", + "0x2d3f9ef6", + "0xf259cd27", + "0xda3a892f", + "0x3b688da6", + "0x12d57170", + "0x1407093b", + "0x8770e682", + "0xe9160f3e", + "0xc6bf691d", + "0xb214c901", + "0x9bf6d875", + "0x22a3c007", + "0xf72c5048", + "0xfd5bd5fe", + "0x41258b5c", + "0x582c78d2", + "0x82904716", + "0xffaf3f1a", + "0x911b8ee2", + "0x04376ff4" + ], + "action": 0 + }, + { + "facetAddress": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", + "functionSelectors": [ + "0x8d365457", + "0xa02288f4", + "0x29d99b10", + "0x8f11d27f", + "0x76ca2e52", + "0xd251dc35", + "0x7652f59d", + "0x1301caa2", + "0x8b480b12", + "0x2d91a515", + "0xb3a4eab4", + "0xbb0577eb", + "0xad94911b", + "0xf495e807", + "0x4bbcba8e", + "0x241ca57a", + "0xb6618dff", + "0xff126de9", + "0x80b297e8", + "0x74c6b89b" + ], + "action": 0 + }, + { + "facetAddress": "0x273c33499f774D2C2466ef95352A7016474C43ee", + "functionSelectors": [ + "0xea027c2f", + "0xe5f6220f", + "0x4b141bb4", + "0x2bf63bcc", + "0x1963e426", + "0x3e74aea0", + "0x9c8eab97", + "0x43be5eaf", + "0x72a30e08", + "0x8dc51484", + "0xa1a23c29" + ], + "action": 0 + }, + { + "facetAddress": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", + "functionSelectors": [ + "0x1f931c1c", + "0x56a8ea48", + "0xbbf2358e", + "0x2c67849c" + ], + "action": 0 + }, + { + "facetAddress": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", + "functionSelectors": [ + "0x9a7e155e" + ], + "action": 0 + }, + { + "facetAddress": "0x3Bcf4185443A339517aD4e580067f178d1B68E1D", + "functionSelectors": [ + "0xcdffacc6", + "0x52ef6b2c", + "0xadfca15e", + "0x7a0ed627", + "0x01ffc9a7" + ], + "action": 0 + } + ], + [ + { + "initContract": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", + "initData": "0x2a84809100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000148e2b093000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + }, + { + "initContract": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", + "initData": "0x9a7e155e00000000000000000000000000000000000000000000000000000000667261780000000000000000000000009963a1e4fd60ba4a89e92930c8d8686514705bb600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000296da2ce82eb3b98eb05925bc5777c7da0d0f09" + } + ] + ], + "numDeployments": 2, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_contractOwner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"initContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initData\",\"type\":\"bytes\"}],\"internalType\":\"struct ConnextDiamond.Initialization[]\",\"name\":\"_initializations\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ConnextDiamond__fallback_facetNotExit\",\"type\":\"error\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_contractOwner\":\"the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\",\"_diamondCut\":\"the list of facet to add\",\"_initializations\":\"the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"This construct a diamond contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/ConnextDiamond.sol\":\"ConnextDiamond\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/helpers/ConnextDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\ncontract ConnextDiamond {\\n error ConnextDiamond__fallback_facetNotExit();\\n\\n struct Initialization {\\n address initContract;\\n bytes initData;\\n }\\n\\n /// @notice This construct a diamond contract\\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\\n /// @param _diamondCut the list of facet to add\\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\\n constructor(\\n address _contractOwner,\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n Initialization[] memory _initializations\\n ) payable {\\n if (_contractOwner != address(0)) {\\n LibDiamond.setContractOwner(_contractOwner);\\n }\\n\\n LibDiamond.diamondCut(_diamondCut, address(0), \\\"\\\");\\n\\n uint256 len = _initializations.length;\\n for (uint256 i = 0; i < len; ) {\\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n // Find facet for function that is called and execute the\\n // function if a facet is found and return any value.\\n fallback() external payable {\\n LibDiamond.DiamondStorage storage ds;\\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\\n // get diamond storage\\n assembly {\\n ds.slot := position\\n }\\n // get facet from function selector\\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\\n if (facet == address(0)) {\\n revert ConnextDiamond__fallback_facetNotExit();\\n }\\n // Execute external function from facet using delegatecall and return any value.\\n assembly {\\n // copy function selector and any arguments\\n calldatacopy(0, 0, calldatasize())\\n // execute function call using the facet\\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\\n // get any return value\\n returndatacopy(0, 0, returndatasize())\\n // return any return value or error back to the caller\\n switch result\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x5081103031ce4c9a3d1ba724d3e4acfc4e2f52fa6936ccfcedb5c2b557e38506\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405260405162002c3738038062002c37833981016040819052620000269162001497565b6001600160a01b038316156200004c576200004c83620000ed60201b620000821760201c565b62000074826000604051806020016040528060008152506200017b60201b6200010f1760201c565b805160005b81811015620000e257620000d98382815181106200009b576200009b6200166b565b602002602001015160000151848381518110620000bc57620000bc6200166b565b602002602001015160200151620004a160201b620003eb1760201c565b60010162000079565b50505050506200187f565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602062002b8b833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602062002b8b83398151915290600090620001a690869086908690602001620016c5565b60408051601f198184030181529190528051602090910120600283015490915015620002525760008181526005830160205260409020548015801590620001ed5750428111155b6200023f5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c617073656400000060448201526064015b60405180910390fd5b5060008181526005830160205260408120555b845160005b818110156200044f5760008782815181106200027757620002776200166b565b6020026020010151602001519050600060028111156200029b576200029b62001681565b816002811115620002b057620002b062001681565b036200030e5762000308888381518110620002cf57620002cf6200166b565b602002602001015160000151898481518110620002f057620002f06200166b565b602002602001015160400151620006c660201b60201c565b62000445565b600181600281111562000325576200032562001681565b036200037d57620003088883815181106200034457620003446200166b565b6020026020010151600001518984815181106200036557620003656200166b565b6020026020010151604001516200094360201b60201c565b600281600281111562000394576200039462001681565b03620003ec5762000308888381518110620003b357620003b36200166b565b602002602001015160000151898481518110620003d457620003d46200166b565b60200260200101516040015162000bd260201b60201c565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b606482015260840162000236565b5060010162000257565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516200048593929190620016c5565b60405180910390a1620004998585620004a1565b505050505050565b6001600160a01b0382166200052b57805115620005275760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606482015260840162000236565b5050565b8051600003620005a45760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606482015260840162000236565b6001600160a01b0382163014620005da57620005da8260405180606001604052806028815260200162002bab6028913962000dcd565b600080836001600160a01b031683604051620005f79190620017cc565b600060405180830381855af49150503d806000811462000634576040519150601f19603f3d011682016040523d82523d6000602084013e62000639565b606091505b509150915081620006c05780511562000668578060405162461bcd60e51b8152600401620002369190620017ea565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b606482015260840162000236565b50505050565b80516000036200071c5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002b8b8339815191526001600160a01b038316620007885760405162461bcd60e51b815260206004820152602c602482015260008051602062002bd383398151915260448201526b65206164647265737328302960a01b606482015260840162000236565b6001600160a01b0383166000908152600182016020526040812054906001600160601b0382169003620007c157620007c1828562000dfe565b825160005b8181101562000499576000858281518110620007e657620007e66200166b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156200088e5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c7265616479206578697374730000000000000000000000606482015260840162000236565b6001600160e01b0319821660008181526020888152604080832080546001600160a01b03908116600160a01b6001600160601b038d16021782558d168085526001808d0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925288905281546001600160a01b0319161790558462000932816200181c565b9550508260010192505050620007c6565b805160008190036200099b5760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002b8b8339815191526001600160a01b03841662000a075760405162461bcd60e51b815260206004820152602c602482015260008051602062002bd383398151915260448201526b65206164647265737328302960a01b606482015260840162000236565b6001600160a01b0384166000908152600182016020526040812054906001600160601b038216900362000a405762000a40828662000dfe565b60005b838110156200049957600085828151811062000a635762000a636200166b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908816810362000b105760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000606482015260840162000236565b62000b1d85828462000e6b565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558d168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558362000bc1816200181c565b945050826001019250505062000a43565b805160000362000c285760405162461bcd60e51b815260206004820152602b602482015260008051602062002c1783398151915260448201526a1858d95d081d1bc818dd5d60aa1b606482015260840162000236565b60008051602062002b8b833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b0385161562000cc75760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d757374206265206164647265737328302900000000000000000000606482015260840162000236565b835160005b8181101562000dc457600086828151811062000cec5762000cec6200166b565b60200260200101519050846001600160e01b031916816001600160e01b0319161415801562000d2857506001600160e01b031981811690851614155b62000d895760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b606482015260840162000236565b6001600160e01b031981166000908152602087905260409020546001600160a01b031662000db987828462000e6b565b505060010162000ccc565b50505050505050565b806001600160a01b0383163b62000df95760405162461bcd60e51b8152600401620002369190620017ea565b505050565b62000e238160405180606001604052806024815260200162002bf36024913962000dcd565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160a01b03821662000ee95760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606482015260840162000236565b306001600160a01b0383160362000f5a5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b606482015260840162000236565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b0316929162000fab916200184d565b9050808214620010a4576001600160a01b0384166000908152600186016020526040812080548390811062000fe45762000fe46200166b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106200103857620010386200166b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480620010d057620010d062001869565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b031985168252869052604081208190558190036200124557600285015460009062001136906001906200184d565b6001600160a01b0386166000908152600180890160205260409091200154909150808214620011ec5760008760020183815481106200117957620011796200166b565b6000918252602090912001546002890180546001600160a01b039092169250829184908110620011ad57620011ad6200166b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548062001202576200120262001869565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b80516001600160a01b03811681146200126457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620012a457620012a462001269565b60405290565b604051606081016001600160401b0381118282101715620012a457620012a462001269565b604051601f8201601f191681016001600160401b0381118282101715620012fa57620012fa62001269565b604052919050565b60006001600160401b038211156200131e576200131e62001269565b5060051b60200190565b60005b83811015620013455781810151838201526020016200132b565b50506000910152565b6000601f83818401126200136157600080fd5b825160206200137a620013748362001302565b620012cf565b82815260059290921b850181019181810190878411156200139a57600080fd5b8287015b848110156200148b5780516001600160401b0380821115620013c05760008081fd5b908901906040601f19838d038101821315620013dc5760008081fd5b620013e66200127f565b620013f38986016200124c565b81528285015184811115620014085760008081fd5b8086019550508d603f8601126200141f5760008081fd5b888501518481111562001436576200143662001269565b620014478a848e84011601620012cf565b94508085528e848288010111156200146157600092508283fd5b62001472818b870186890162001328565b508089019390935250508452509183019183016200139e565b50979650505050505050565b600080600060608486031215620014ad57600080fd5b620014b8846200124c565b60208501519093506001600160401b0380821115620014d657600080fd5b818601915086601f830112620014eb57600080fd5b8151620014fc620013748262001302565b8082825260208201915060208360051b8601019250898311156200151f57600080fd5b602085015b8381101562001637578051858111156200153d57600080fd5b86016060818d03601f190112156200155457600080fd5b6200155e620012aa565b6200156c602083016200124c565b81526040820151600381106200158157600080fd5b60208201526060820151878111156200159957600080fd5b8083019250508c603f830112620015af57600080fd5b6020820151620015c3620013748262001302565b81815260059190911b83016040019060208101908f831115620015e557600080fd5b6040850194505b82851015620016205784516001600160e01b0319811681146200160e57600080fd5b825260209485019490910190620015ec565b604084015250508452506020928301920162001524565b50604089015190965093505050808211156200165257600080fd5b5062001661868287016200134e565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60008151808452620016b181602086016020860162001328565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156200179a57898403607f19018652815180516001600160a01b031685528381015189860190600381106200173657634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620017845783516001600160e01b031916825292860192600192909201919086019062001758565b50978501979550505090820190600101620016ee565b50506001600160a01b038a16908801528681036040880152620017be818962001697565b9a9950505050505050505050565b60008251620017e081846020870162001328565b9190910192915050565b602081526000620017ff602083018462001697565b9392505050565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038281166002600160601b0319810162001843576200184362001806565b6001019392505050565b8181038181111562001863576200186362001806565b92915050565b634e487b7160e01b600052603160045260246000fd5b6112fc806200188f6000396000f3fe60806040523661000b57005b600080356001600160e01b031916815260008051602061125b833981519152602081905260409091205481906001600160a01b03168061005e57604051638249a7f160e01b815260040160405180910390fd5b3660008037600080366000845af43d6000803e80801561007d573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602061125b833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602061125b833981519152906000906101379086908690869060200161100c565b60408051601f1981840301815291905280516020909101206002830154909150156101e0576000818152600583016020526040902054801580159061017c5750428111155b6101cd5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c617073656400000060448201526064015b60405180910390fd5b5060008181526005830160205260408120555b845160005b8181101561039d5760008782815181106102015761020161110c565b60200260200101516020015190506000600281111561022257610222610fa6565b81600281111561023457610234610fa6565b036102825761027d88838151811061024e5761024e61110c565b60200260200101516000015189848151811061026c5761026c61110c565b6020026020010151604001516105fe565b610394565b600181600281111561029657610296610fa6565b036102df5761027d8883815181106102b0576102b061110c565b6020026020010151600001518984815181106102ce576102ce61110c565b60200260200101516040015161076f565b60028160028111156102f3576102f3610fa6565b0361033c5761027d88838151811061030d5761030d61110c565b60200260200101516000015189848151811061032b5761032b61110c565b6020026020010151604001516108f8565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084016101c4565b506001016101e5565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516103d19392919061100c565b60405180910390a16103e385856103eb565b505050505050565b6001600160a01b0382166104725780511561046e5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016101c4565b5050565b80516000036104e95760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016101c4565b6001600160a01b038216301461051b5761051b8260405180606001604052806028815260200161127b60289139610aaa565b600080836001600160a01b0316836040516105369190611122565b600060405180830381855af49150503d8060008114610571576040519150601f19603f3d011682016040523d82523d6000602084013e610576565b606091505b5091509150816105f8578051156105a1578060405162461bcd60e51b81526004016101c4919061113e565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b60648201526084016101c4565b50505050565b805160000361061f5760405162461bcd60e51b81526004016101c490611158565b60008051602061125b8339815191526001600160a01b0383166106545760405162461bcd60e51b81526004016101c4906111a3565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361068a5761068a8285610ad8565b825160005b818110156103e35760008582815181106106ab576106ab61110c565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156107495760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b60648201526084016101c4565b6107558683878b610b42565b8461075f81611205565b955050826001019250505061068f565b805160008190036107925760405162461bcd60e51b81526004016101c490611158565b60008051602061125b8339815191526001600160a01b0384166107c75760405162461bcd60e51b81526004016101c4906111a3565b6001600160a01b0384166000908152600182016020526040812054906001600160601b03821690036107fd576107fd8286610ad8565b60005b838110156103e357600085828151811061081c5761081c61110c565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036108c75760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016101c4565b6108d2858284610be2565b6108de8583868b610b42565b836108e881611205565b9450508260010192505050610800565b80516000036109195760405162461bcd60e51b81526004016101c490611158565b60008051602061125b833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b038516156109ae5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b60648201526084016101c4565b835160005b81811015610aa15760008682815181106109cf576109cf61110c565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610a0a57506001600160e01b031981811690851614155b610a695760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b60648201526084016101c4565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610a97878284610be2565b50506001016109b3565b50505050505050565b806001600160a01b0383163b610ad35760405162461bcd60e51b81526004016101c4919061113e565b505050565b610afa816040518060600160405280602481526020016112a360249139610aaa565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610c5e5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016101c4565b306001600160a01b03831603610ccd5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b60648201526084016101c4565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610d1c9161122b565b9050808214610e0e576001600160a01b03841660009081526001860160205260408120805483908110610d5157610d5161110c565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610da257610da261110c565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610e3757610e37611244565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610f9f576002850154600090610e9a9060019061122b565b6001600160a01b0386166000908152600180890160205260409091200154909150808214610f49576000876002018381548110610ed957610ed961110c565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610f0a57610f0a61110c565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480610f5c57610f5c611244565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b634e487b7160e01b600052602160045260246000fd5b60005b83811015610fd7578181015183820152602001610fbf565b50506000910152565b60008151808452610ff8816020860160208601610fbc565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156110dc57898403607f19018652815180516001600160a01b0316855283810151898601906003811061107b57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156110c75783516001600160e01b031916825292860192600192909201919086019061109d565b50978501979550505090820190600101611035565b50506001600160a01b038a169088015286810360408801526110fe8189610fe0565b9a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60008251611134818460208701610fbc565b9190910192915050565b6020815260006111516020830184610fe0565b9392505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818103611221576112216111ef565b6001019392505050565b8181038181111561123e5761123e6111ef565b92915050565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212203652c21053e43acbcef46f6389d6dc2a2b51f63877f2870257da4a1fab635c4564736f6c63430008110033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64654c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e2066", + "deployedBytecode": "0x60806040523661000b57005b600080356001600160e01b031916815260008051602061125b833981519152602081905260409091205481906001600160a01b03168061005e57604051638249a7f160e01b815260040160405180910390fd5b3660008037600080366000845af43d6000803e80801561007d573d6000f35b3d6000fd5b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13205460405160008051602061125b833981519152916001600160a01b03848116929116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b60405160008051602061125b833981519152906000906101379086908690869060200161100c565b60408051601f1981840301815291905280516020909101206002830154909150156101e0576000818152600583016020526040902054801580159061017c5750428111155b6101cd5760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c617073656400000060448201526064015b60405180910390fd5b5060008181526005830160205260408120555b845160005b8181101561039d5760008782815181106102015761020161110c565b60200260200101516020015190506000600281111561022257610222610fa6565b81600281111561023457610234610fa6565b036102825761027d88838151811061024e5761024e61110c565b60200260200101516000015189848151811061026c5761026c61110c565b6020026020010151604001516105fe565b610394565b600181600281111561029657610296610fa6565b036102df5761027d8883815181106102b0576102b061110c565b6020026020010151600001518984815181106102ce576102ce61110c565b60200260200101516040015161076f565b60028160028111156102f3576102f3610fa6565b0361033c5761027d88838151811061030d5761030d61110c565b60200260200101516000015189848151811061032b5761032b61110c565b6020026020010151604001516108f8565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084016101c4565b506001016101e5565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738686866040516103d19392919061100c565b60405180910390a16103e385856103eb565b505050505050565b6001600160a01b0382166104725780511561046e5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d7074790000000060648201526084016101c4565b5050565b80516000036104e95760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f74206164647265737328302900000060648201526084016101c4565b6001600160a01b038216301461051b5761051b8260405180606001604052806028815260200161127b60289139610aaa565b600080836001600160a01b0316836040516105369190611122565b600060405180830381855af49150503d8060008114610571576040519150601f19603f3d011682016040523d82523d6000602084013e610576565b606091505b5091509150816105f8578051156105a1578060405162461bcd60e51b81526004016101c4919061113e565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b60648201526084016101c4565b50505050565b805160000361061f5760405162461bcd60e51b81526004016101c490611158565b60008051602061125b8339815191526001600160a01b0383166106545760405162461bcd60e51b81526004016101c4906111a3565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361068a5761068a8285610ad8565b825160005b818110156103e35760008582815181106106ab576106ab61110c565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b031680156107495760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b60648201526084016101c4565b6107558683878b610b42565b8461075f81611205565b955050826001019250505061068f565b805160008190036107925760405162461bcd60e51b81526004016101c490611158565b60008051602061125b8339815191526001600160a01b0384166107c75760405162461bcd60e51b81526004016101c4906111a3565b6001600160a01b0384166000908152600182016020526040812054906001600160601b03821690036107fd576107fd8286610ad8565b60005b838110156103e357600085828151811061081c5761081c61110c565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036108c75760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016101c4565b6108d2858284610be2565b6108de8583868b610b42565b836108e881611205565b9450508260010192505050610800565b80516000036109195760405162461bcd60e51b81526004016101c490611158565b60008051602061125b833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b038516156109ae5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b60648201526084016101c4565b835160005b81811015610aa15760008682815181106109cf576109cf61110c565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610a0a57506001600160e01b031981811690851614155b610a695760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b60648201526084016101c4565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610a97878284610be2565b50506001016109b3565b50505050505050565b806001600160a01b0383163b610ad35760405162461bcd60e51b81526004016101c4919061113e565b505050565b610afa816040518060600160405280602481526020016112a360249139610aaa565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610c5e5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016101c4565b306001600160a01b03831603610ccd5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b60648201526084016101c4565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610d1c9161122b565b9050808214610e0e576001600160a01b03841660009081526001860160205260408120805483908110610d5157610d5161110c565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610da257610da261110c565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610e3757610e37611244565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610f9f576002850154600090610e9a9060019061122b565b6001600160a01b0386166000908152600180890160205260409091200154909150808214610f49576000876002018381548110610ed957610ed961110c565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610f0a57610f0a61110c565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480610f5c57610f5c611244565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505b5050505050565b634e487b7160e01b600052602160045260246000fd5b60005b83811015610fd7578181015183820152602001610fbf565b50506000910152565b60008151808452610ff8816020860160208601610fbc565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b848110156110dc57898403607f19018652815180516001600160a01b0316855283810151898601906003811061107b57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156110c75783516001600160e01b031916825292860192600192909201919086019061109d565b50978501979550505090820190600101611035565b50506001600160a01b038a169088015286810360408801526110fe8189610fe0565b9a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b60008251611134818460208701610fbc565b9190910192915050565b6020815260006111516020830184610fe0565b9392505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b03808316818103611221576112216111ef565b6001019392505050565b8181038181111561123e5761123e6111ef565b92915050565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212203652c21053e43acbcef46f6389d6dc2a2b51f63877f2870257da4a1fab635c4564736f6c63430008110033", + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_contractOwner": "the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.", + "_diamondCut": "the list of facet to add", + "_initializations": "the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "constructor": { + "notice": "This construct a diamond contract" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/DiamondCutFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/DiamondCutFacetStaging.json new file mode 100644 index 0000000000..c9cdc6c647 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/DiamondCutFacetStaging.json @@ -0,0 +1,381 @@ +{ + "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCut", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "DiamondCutProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "indexed": false, + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "DiamondCutRescinded", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "diamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "getAcceptanceTime", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "proposeDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "enum IDiamondCut.FacetCutAction", + "name": "action", + "type": "uint8" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondCut.FacetCut[]", + "name": "_diamondCut", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "_init", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_calldata", + "type": "bytes" + } + ], + "name": "rescindDiamondCut", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x4af7e2042a4c5be231a43521f4a14bf2ad3eb4de91841b8f15c785a4e950fb31", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1536115", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x3017caef89cdf936b6191e2fdce7b5d3f79b110982671316c19da13344353f0e", + "transactionHash": "0x4af7e2042a4c5be231a43521f4a14bf2ad3eb4de91841b8f15c785a4e950fb31", + "logs": [], + "blockNumber": 2894828, + "cumulativeGasUsed": "1586677", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"DiamondCutProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"indexed\":false,\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"DiamondCutRescinded\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"diamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"getAcceptanceTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"proposeDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"enum IDiamondCut.FacetCutAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondCut.FacetCut[]\",\"name\":\"_diamondCut\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"_init\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"rescindDiamondCut\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}},\"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"params\":{\"_calldata\":\"A function call, including function selector and arguments _calldata is executed with delegatecall on _init\",\"_diamondCut\":\"Contains the facet addresses and function selectors\",\"_init\":\"The address of the contract or facet to execute _calldata\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"diamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Add/replace/remove any number of functions and optionally execute a function with delegatecall\"},\"getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Returns the acceptance time for a given proposal\"},\"proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Propose to add/replace/remove any number of functions and optionally execute a function with delegatecall\"},\"rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)\":{\"notice\":\"Propose to add/replace/remove any number of functions and optionally execute a function with delegatecall\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/DiamondCutFacet.sol\":\"DiamondCutFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/core/connext/facets/DiamondCutFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\ncontract DiamondCutFacet is IDiamondCut {\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external override {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\\n }\\n\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.proposeDiamondCut(_diamondCut, _init, _calldata);\\n }\\n\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external {\\n LibDiamond.enforceIsContractOwner();\\n LibDiamond.rescindDiamondCut(_diamondCut, _init, _calldata);\\n }\\n\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external view returns (uint256) {\\n return LibDiamond.acceptanceTime(keccak256(abi.encode(_diamondCut, _init, _calldata)));\\n }\\n}\\n\",\"keccak256\":\"0xfd7e9f489e8a67109b64fcb1136fd8126cfddb7e4db9096560b9285cc4c57486\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611ac4806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631f931c1c146100515780632c67849c1461006657806356a8ea4814610079578063bbf2358e1461009e575b600080fd5b61006461005f3660046112de565b6100b1565b005b6100646100743660046112de565b61010a565b61008c6100873660046112de565b61015c565b60405190815260200160405180910390f35b6100646100ac3660046112de565b6101cb565b6100b961021d565b6101036100c6858761144b565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061028e92505050565b5050505050565b61011261021d565b61010361011f858761144b565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056592505050565b60006101c1868686868660405160200161017a959493929190611621565b6040516020818303038152906040528051906020012060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1321602052604090205490565b9695505050505050565b6101d361021d565b6101036101e0858761144b565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105f692505050565b600080516020611a23833981519152600401546001600160a01b0316331461028c5760405162461bcd60e51b815260206004820152601b60248201527f4c69624469616d6f6e643a2021636f6e7472616374206f776e6572000000000060448201526064015b60405180910390fd5b565b604051600080516020611a23833981519152906000906102b690869086908690602001611847565b60408051601f19818403018152919052805160209091012060028301549091501561035a57600081815260058301602052604090205480158015906102fb5750428111155b6103475760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c61707365640000006044820152606401610283565b5060008181526005830160205260408120555b845160005b8181101561051757600087828151811061037b5761037b61187b565b60200260200101516020015190506000600281111561039c5761039c611578565b8160028111156103ae576103ae611578565b036103fc576103f78883815181106103c8576103c861187b565b6020026020010151600001518984815181106103e6576103e661187b565b6020026020010151604001516106bf565b61050e565b600181600281111561041057610410611578565b03610459576103f788838151811061042a5761042a61187b565b6020026020010151600001518984815181106104485761044861187b565b602002602001015160400151610830565b600281600281111561046d5761046d611578565b036104b6576103f78883815181106104875761048761187b565b6020026020010151600001518984815181106104a5576104a561187b565b6020026020010151604001516109b9565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b6064820152608401610283565b5060010161035f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67386868660405161054b93929190611847565b60405180910390a161055d8585610b6b565b505050505050565b600080516020611a23833981519152600501600084848460405160200161058e93929190611847565b604051602081830303815290604052805190602001208152602001908152602001600020600090557f47b4eb69218cd939e2a72afd9d24fe3a6ca02515a6d712ff3942062df2eedbdb8383836040516105e993929190611847565b60405180910390a1505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132254600080516020611a238339815191529060009061063590426118a7565b90508082600501600087878760405160200161065393929190611847565b604051602081830303815290604052805190602001208152602001908152602001600020819055507f6c20294df7018c510b52fd6cc0352d7b78056de164d751b75da6ef7b63daa83e858585846040516106b094939291906118c0565b60405180910390a15050505050565b80516000036106e05760405162461bcd60e51b815260040161028390611906565b600080516020611a238339815191526001600160a01b0383166107155760405162461bcd60e51b815260040161028390611951565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361074b5761074b8285610d7e565b825160005b8181101561055d57600085828151811061076c5761076c61187b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b0316801561080a5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b6064820152608401610283565b6108168683878b610de8565b846108208161199d565b9550508260010192505050610750565b805160008190036108535760405162461bcd60e51b815260040161028390611906565b600080516020611a238339815191526001600160a01b0384166108885760405162461bcd60e51b815260040161028390611951565b6001600160a01b0384166000908152600182016020526040812054906001600160601b03821690036108be576108be8286610d7e565b60005b8381101561055d5760008582815181106108dd576108dd61187b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036109885760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610283565b610993858284610e88565b61099f8583868b610de8565b836109a98161199d565b94505082600101925050506108c1565b80516000036109da5760405162461bcd60e51b815260040161028390611906565b600080516020611a23833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b03851615610a6f5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b6064820152608401610283565b835160005b81811015610b62576000868281518110610a9057610a9061187b565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610acb57506001600160e01b031981811690851614155b610b2a5760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b6064820152608401610283565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610b58878284610e88565b5050600101610a74565b50505050505050565b6001600160a01b038216610bf257805115610bee5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610283565b5050565b8051600003610c695760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610283565b6001600160a01b0382163014610c9b57610c9b82604051806060016040528060288152602001611a436028913961124b565b600080836001600160a01b031683604051610cb691906119c3565b600060405180830381855af49150503d8060008114610cf1576040519150601f19603f3d011682016040523d82523d6000602084013e610cf6565b606091505b509150915081610d7857805115610d21578060405162461bcd60e51b815260040161028391906119df565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b6064820152608401610283565b50505050565b610da081604051806060016040528060248152602001611a6b6024913961124b565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610f045760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610283565b306001600160a01b03831603610f735760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401610283565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610fc2916119f9565b90508082146110b4576001600160a01b03841660009081526001860160205260408120805483908110610ff757610ff761187b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106110485761104861187b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b038416600090815260018601602052604090208054806110dd576110dd611a0c565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610103576002850154600090611140906001906119f9565b6001600160a01b03861660009081526001808901602052604090912001549091508082146111ef57600087600201838154811061117f5761117f61187b565b6000918252602090912001546002890180546001600160a01b0390921692508291849081106111b0576111b061187b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548061120257611202611a0c565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b806001600160a01b0383163b6112745760405162461bcd60e51b815260040161028391906119df565b505050565b80356001600160a01b038116811461129057600080fd5b919050565b60008083601f8401126112a757600080fd5b50813567ffffffffffffffff8111156112bf57600080fd5b6020830191508360208285010111156112d757600080fd5b9250929050565b6000806000806000606086880312156112f657600080fd5b853567ffffffffffffffff8082111561130e57600080fd5b818801915088601f83011261132257600080fd5b81358181111561133157600080fd5b8960208260051b850101111561134657600080fd5b6020830197508096505061135c60208901611279565b9450604088013591508082111561137257600080fd5b5061137f88828901611295565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113c9576113c9611390565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113f8576113f8611390565b604052919050565b600067ffffffffffffffff82111561141a5761141a611390565b5060051b60200190565b80356003811061129057600080fd5b80356001600160e01b03198116811461129057600080fd5b600061145e61145984611400565b6113cf565b83815260208082019190600586811b86013681111561147c57600080fd5b865b8181101561156b57803567ffffffffffffffff8082111561149f5760008081fd5b818a019150606082360312156114b55760008081fd5b6114bd6113a6565b6114c683611279565b81526114d3878401611424565b87820152604080840135838111156114eb5760008081fd5b939093019236601f85011261150257600092508283fd5b8335925061151261145984611400565b83815292871b8401880192888101903685111561152f5760008081fd5b948901945b848610156115545761154586611433565b82529489019490890190611534565b91830191909152508852505094830194830161147e565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600381106115ac57634e487b7160e01b600052602160045260246000fd5b9052565b8183526000602080850194508260005b858110156115ed576001600160e01b03196115da83611433565b16875295820195908201906001016115c0565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060808252818101869052600090600560808085019089831b8601018a855b8b81101561170557878303607f190184528135368e9003605e1901811261166657600080fd5b8d016001600160a01b0361167982611279565b1684526020611689818301611424565b6116958287018261158e565b50604080830135601e198436030181126116ae57600080fd5b90920181810192903567ffffffffffffffff8111156116cc57600080fd5b80891b36038413156116dd57600080fd5b89828801526116ef8a880182866115b0565b9783019796505050929092019150600101611640565b50506001600160a01b0389166020870152858103604087015261172981888a6115f8565b9b9a5050505050505050505050565b600081518084526020808501808196508360051b810191508286016000805b868110156117e9578385038a52825180516001600160a01b03168652868101516060908188019061178a8a8a018261158e565b506040928301519288019190915281519081905290870190608087019084905b808210156117d45783516001600160e01b03191683529289019291890191600191909101906117aa565b50509a87019a95505091850191600101611757565b509298975050505050505050565b60005b838110156118125781810151838201526020016117fa565b50506000910152565b600081518084526118338160208601602086016117f7565b601f01601f19169290920160200192915050565b60608152600061185a6060830186611738565b6001600160a01b038516602084015282810360408401526101c1818561181b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156118ba576118ba611891565b92915050565b6080815260006118d36080830187611738565b6001600160a01b038616602084015282810360408401526118f4818661181b565b91505082606083015295945050505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b60006001600160601b038083168181036119b9576119b9611891565b6001019392505050565b600082516119d58184602087016117f7565b9190910192915050565b6020815260006119f2602083018461181b565b9392505050565b818103818111156118ba576118ba611891565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220d7015fe5a1d65a1c30b4d8718001179a86cdd7dafda138481807b85aeca7375f64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631f931c1c146100515780632c67849c1461006657806356a8ea4814610079578063bbf2358e1461009e575b600080fd5b61006461005f3660046112de565b6100b1565b005b6100646100743660046112de565b61010a565b61008c6100873660046112de565b61015c565b60405190815260200160405180910390f35b6100646100ac3660046112de565b6101cb565b6100b961021d565b6101036100c6858761144b565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061028e92505050565b5050505050565b61011261021d565b61010361011f858761144b565b8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056592505050565b60006101c1868686868660405160200161017a959493929190611621565b6040516020818303038152906040528051906020012060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1321602052604090205490565b9695505050505050565b6101d361021d565b6101036101e0858761144b565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105f692505050565b600080516020611a23833981519152600401546001600160a01b0316331461028c5760405162461bcd60e51b815260206004820152601b60248201527f4c69624469616d6f6e643a2021636f6e7472616374206f776e6572000000000060448201526064015b60405180910390fd5b565b604051600080516020611a23833981519152906000906102b690869086908690602001611847565b60408051601f19818403018152919052805160209091012060028301549091501561035a57600081815260058301602052604090205480158015906102fb5750428111155b6103475760405162461bcd60e51b815260206004820152601d60248201527f4c69624469616d6f6e643a2064656c6179206e6f7420656c61707365640000006044820152606401610283565b5060008181526005830160205260408120555b845160005b8181101561051757600087828151811061037b5761037b61187b565b60200260200101516020015190506000600281111561039c5761039c611578565b8160028111156103ae576103ae611578565b036103fc576103f78883815181106103c8576103c861187b565b6020026020010151600001518984815181106103e6576103e661187b565b6020026020010151604001516106bf565b61050e565b600181600281111561041057610410611578565b03610459576103f788838151811061042a5761042a61187b565b6020026020010151600001518984815181106104485761044861187b565b602002602001015160400151610830565b600281600281111561046d5761046d611578565b036104b6576103f78883815181106104875761048761187b565b6020026020010151600001518984815181106104a5576104a561187b565b6020026020010151604001516109b9565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b6064820152608401610283565b5060010161035f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67386868660405161054b93929190611847565b60405180910390a161055d8585610b6b565b505050505050565b600080516020611a23833981519152600501600084848460405160200161058e93929190611847565b604051602081830303815290604052805190602001208152602001908152602001600020600090557f47b4eb69218cd939e2a72afd9d24fe3a6ca02515a6d712ff3942062df2eedbdb8383836040516105e993929190611847565b60405180910390a1505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132254600080516020611a238339815191529060009061063590426118a7565b90508082600501600087878760405160200161065393929190611847565b604051602081830303815290604052805190602001208152602001908152602001600020819055507f6c20294df7018c510b52fd6cc0352d7b78056de164d751b75da6ef7b63daa83e858585846040516106b094939291906118c0565b60405180910390a15050505050565b80516000036106e05760405162461bcd60e51b815260040161028390611906565b600080516020611a238339815191526001600160a01b0383166107155760405162461bcd60e51b815260040161028390611951565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361074b5761074b8285610d7e565b825160005b8181101561055d57600085828151811061076c5761076c61187b565b6020908102919091018101516001600160e01b031981166000908152918790526040909120549091506001600160a01b0316801561080a5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b6064820152608401610283565b6108168683878b610de8565b846108208161199d565b9550508260010192505050610750565b805160008190036108535760405162461bcd60e51b815260040161028390611906565b600080516020611a238339815191526001600160a01b0384166108885760405162461bcd60e51b815260040161028390611951565b6001600160a01b0384166000908152600182016020526040812054906001600160601b03821690036108be576108be8286610d7e565b60005b8381101561055d5760008582815181106108dd576108dd61187b565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b0390811690881681036109885760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e00000000000000006064820152608401610283565b610993858284610e88565b61099f8583868b610de8565b836109a98161199d565b94505082600101925050506108c1565b80516000036109da5760405162461bcd60e51b815260040161028390611906565b600080516020611a23833981519152635df91ac760e11b6307e4c70760e21b6001600160a01b03851615610a6f5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b6064820152608401610283565b835160005b81811015610b62576000868281518110610a9057610a9061187b565b60200260200101519050846001600160e01b031916816001600160e01b03191614158015610acb57506001600160e01b031981811690851614155b610b2a5760405162461bcd60e51b815260206004820152602a60248201527f4c69624469616d6f6e644375743a2043616e6e6f742072656d6f7665206375746044820152692073656c6563746f727360b01b6064820152608401610283565b6001600160e01b031981166000908152602087905260409020546001600160a01b0316610b58878284610e88565b5050600101610a74565b50505050505050565b6001600160a01b038216610bf257805115610bee5760405162461bcd60e51b815260206004820152603c60248201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860448201527f3029206275745f63616c6c64617461206973206e6f7420656d707479000000006064820152608401610283565b5050565b8051600003610c695760405162461bcd60e51b815260206004820152603d60248201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460448201527f7920627574205f696e6974206973206e6f7420616464726573732830290000006064820152608401610283565b6001600160a01b0382163014610c9b57610c9b82604051806060016040528060288152602001611a436028913961124b565b600080836001600160a01b031683604051610cb691906119c3565b600060405180830381855af49150503d8060008114610cf1576040519150601f19603f3d011682016040523d82523d6000602084013e610cf6565b606091505b509150915081610d7857805115610d21578060405162461bcd60e51b815260040161028391906119df565b60405162461bcd60e51b815260206004820152602660248201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656044820152651d995c9d195960d21b6064820152608401610283565b50505050565b610da081604051806060016040528060248152602001611a6b6024913961124b565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160e01b0319831660008181526020868152604080832080546001600160601b03909716600160a01b026001600160a01b0397881617815594909516808352600180890183529583208054968701815583528183206008870401805460e09890981c60046007909816979097026101000a96870263ffffffff9097021990971695909517909555529290915281546001600160a01b031916179055565b6001600160a01b038216610f045760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610283565b306001600160a01b03831603610f735760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401610283565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610fc2916119f9565b90508082146110b4576001600160a01b03841660009081526001860160205260408120805483908110610ff757610ff761187b565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b9250829190859081106110485761104861187b565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b038416600090815260018601602052604090208054806110dd576110dd611a0c565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610103576002850154600090611140906001906119f9565b6001600160a01b03861660009081526001808901602052604090912001549091508082146111ef57600087600201838154811061117f5761117f61187b565b6000918252602090912001546002890180546001600160a01b0390921692508291849081106111b0576111b061187b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b8660020180548061120257611202611a0c565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b806001600160a01b0383163b6112745760405162461bcd60e51b815260040161028391906119df565b505050565b80356001600160a01b038116811461129057600080fd5b919050565b60008083601f8401126112a757600080fd5b50813567ffffffffffffffff8111156112bf57600080fd5b6020830191508360208285010111156112d757600080fd5b9250929050565b6000806000806000606086880312156112f657600080fd5b853567ffffffffffffffff8082111561130e57600080fd5b818801915088601f83011261132257600080fd5b81358181111561133157600080fd5b8960208260051b850101111561134657600080fd5b6020830197508096505061135c60208901611279565b9450604088013591508082111561137257600080fd5b5061137f88828901611295565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156113c9576113c9611390565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156113f8576113f8611390565b604052919050565b600067ffffffffffffffff82111561141a5761141a611390565b5060051b60200190565b80356003811061129057600080fd5b80356001600160e01b03198116811461129057600080fd5b600061145e61145984611400565b6113cf565b83815260208082019190600586811b86013681111561147c57600080fd5b865b8181101561156b57803567ffffffffffffffff8082111561149f5760008081fd5b818a019150606082360312156114b55760008081fd5b6114bd6113a6565b6114c683611279565b81526114d3878401611424565b87820152604080840135838111156114eb5760008081fd5b939093019236601f85011261150257600092508283fd5b8335925061151261145984611400565b83815292871b8401880192888101903685111561152f5760008081fd5b948901945b848610156115545761154586611433565b82529489019490890190611534565b91830191909152508852505094830194830161147e565b5092979650505050505050565b634e487b7160e01b600052602160045260246000fd5b600381106115ac57634e487b7160e01b600052602160045260246000fd5b9052565b8183526000602080850194508260005b858110156115ed576001600160e01b03196115da83611433565b16875295820195908201906001016115c0565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060808252818101869052600090600560808085019089831b8601018a855b8b81101561170557878303607f190184528135368e9003605e1901811261166657600080fd5b8d016001600160a01b0361167982611279565b1684526020611689818301611424565b6116958287018261158e565b50604080830135601e198436030181126116ae57600080fd5b90920181810192903567ffffffffffffffff8111156116cc57600080fd5b80891b36038413156116dd57600080fd5b89828801526116ef8a880182866115b0565b9783019796505050929092019150600101611640565b50506001600160a01b0389166020870152858103604087015261172981888a6115f8565b9b9a5050505050505050505050565b600081518084526020808501808196508360051b810191508286016000805b868110156117e9578385038a52825180516001600160a01b03168652868101516060908188019061178a8a8a018261158e565b506040928301519288019190915281519081905290870190608087019084905b808210156117d45783516001600160e01b03191683529289019291890191600191909101906117aa565b50509a87019a95505091850191600101611757565b509298975050505050505050565b60005b838110156118125781810151838201526020016117fa565b50506000910152565b600081518084526118338160208601602086016117f7565b601f01601f19169290920160200192915050565b60608152600061185a6060830186611738565b6001600160a01b038516602084015282810360408401526101c1818561181b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156118ba576118ba611891565b92915050565b6080815260006118d36080830187611738565b6001600160a01b038616602084015282810360408401526118f4818661181b565b91505082606083015295945050505050565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b60006001600160601b038083168181036119b9576119b9611891565b6001019392505050565b600082516119d58184602087016117f7565b9190910192915050565b6020815260006119f2602083018461181b565b9392505050565b818103818111156118ba576118ba611891565b634e487b7160e01b600052603160045260246000fdfec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220d7015fe5a1d65a1c30b4d8718001179a86cdd7dafda138481807b85aeca7375f64736f6c63430008110033", + "devdoc": { + "kind": "dev", + "methods": { + "diamondCut((address,uint8,bytes4[])[],address,bytes)": { + "params": { + "_calldata": "A function call, including function selector and arguments _calldata is executed with delegatecall on _init", + "_diamondCut": "Contains the facet addresses and function selectors", + "_init": "The address of the contract or facet to execute _calldata" + } + }, + "getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)": { + "params": { + "_calldata": "A function call, including function selector and arguments _calldata is executed with delegatecall on _init", + "_diamondCut": "Contains the facet addresses and function selectors", + "_init": "The address of the contract or facet to execute _calldata" + } + }, + "proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)": { + "params": { + "_calldata": "A function call, including function selector and arguments _calldata is executed with delegatecall on _init", + "_diamondCut": "Contains the facet addresses and function selectors", + "_init": "The address of the contract or facet to execute _calldata" + } + }, + "rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)": { + "params": { + "_calldata": "A function call, including function selector and arguments _calldata is executed with delegatecall on _init", + "_diamondCut": "Contains the facet addresses and function selectors", + "_init": "The address of the contract or facet to execute _calldata" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "diamondCut((address,uint8,bytes4[])[],address,bytes)": { + "notice": "Add/replace/remove any number of functions and optionally execute a function with delegatecall" + }, + "getAcceptanceTime((address,uint8,bytes4[])[],address,bytes)": { + "notice": "Returns the acceptance time for a given proposal" + }, + "proposeDiamondCut((address,uint8,bytes4[])[],address,bytes)": { + "notice": "Propose to add/replace/remove any number of functions and optionally execute a function with delegatecall" + }, + "rescindDiamondCut((address,uint8,bytes4[])[],address,bytes)": { + "notice": "Propose to add/replace/remove any number of functions and optionally execute a function with delegatecall" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/DiamondInitStaging.json b/packages/deployments/contracts/deployments/fraxtal/DiamondInitStaging.json new file mode 100644 index 0000000000..aab6b60cc1 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/DiamondInitStaging.json @@ -0,0 +1,864 @@ +{ + "address": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", + "abi": [ + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "DiamondInit__init_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "DiamondInit__init_domainsDontMatch", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_xAppConnectionManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_acceptanceDelay", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_lpTokenTargetAddress", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x7a657d4783fd98c56d5be9da6765214cce745aa83ec2e5cae0a36f97262549e9", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "241572", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x9ae2ac6492469735d17ec69bbd99f28173da7cabfe0bb5785818ac809e1e499c", + "transactionHash": "0x7a657d4783fd98c56d5be9da6765214cce745aa83ec2e5cae0a36f97262549e9", + "logs": [], + "blockNumber": 2894834, + "cumulativeGasUsed": "292122", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DiamondInit__init_alreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DiamondInit__init_domainsDontMatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_xAppConnectionManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_acceptanceDelay\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_lpTokenTargetAddress\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol\":\"DiamondInit\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n*\\n* Implementation of a diamond.\\n/******************************************************************************/\\n\\nimport {IDiamondLoupe} from \\\"../../interfaces/IDiamondLoupe.sol\\\";\\nimport {IDiamondCut} from \\\"../../interfaces/IDiamondCut.sol\\\";\\nimport {IERC165} from \\\"../../interfaces/IERC165.sol\\\";\\n\\nimport {LibDiamond} from \\\"../../libraries/LibDiamond.sol\\\";\\nimport {Constants} from \\\"../../libraries/Constants.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"../BaseConnextFacet.sol\\\";\\n\\nimport {IProposedOwnable} from \\\"../../../../shared/interfaces/IProposedOwnable.sol\\\";\\nimport {IConnectorManager} from \\\"../../../../messaging/interfaces/IConnectorManager.sol\\\";\\n\\n// It is expected that this contract is customized if you want to deploy your diamond\\n// with data from a deployment script. Use the init function to initialize state variables\\n// of your diamond. Add parameters to the init funciton if you need to.\\n\\ncontract DiamondInit is BaseConnextFacet {\\n // ========== Custom Errors ===========\\n error DiamondInit__init_alreadyInitialized();\\n error DiamondInit__init_domainsDontMatch();\\n\\n // ============ External ============\\n\\n // You can add parameters to this function in order to pass in\\n // data to set your own state variables\\n // NOTE: not requiring a longer delay related to constant as we want to be able to test\\n // with shorter governance delays\\n function init(\\n uint32 _domain,\\n address _xAppConnectionManager,\\n uint256 _acceptanceDelay,\\n address _lpTokenTargetAddress\\n ) external {\\n // should not init twice\\n if (s.initialized) {\\n revert DiamondInit__init_alreadyInitialized();\\n }\\n\\n // ensure this is the owner\\n LibDiamond.enforceIsContractOwner();\\n\\n // ensure domains are the same\\n IConnectorManager manager = IConnectorManager(_xAppConnectionManager);\\n if (manager.localDomain() != _domain) {\\n revert DiamondInit__init_domainsDontMatch();\\n }\\n\\n // update the initialized flag\\n s.initialized = true;\\n\\n // adding ERC165 data\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n ds.supportedInterfaces[type(IDiamondCut).interfaceId] = true;\\n ds.supportedInterfaces[type(IDiamondLoupe).interfaceId] = true;\\n ds.supportedInterfaces[type(IProposedOwnable).interfaceId] = true;\\n ds.acceptanceDelay = _acceptanceDelay;\\n\\n // add your own state variables\\n // EIP-2535 specifies that the `diamondCut` function takes two optional\\n // arguments: address _init and bytes calldata _calldata\\n // These arguments are used to execute an arbitrary function using delegatecall\\n // in order to set state variables in the diamond during deployment or an upgrade\\n // More info here: https://eips.ethereum.org/EIPS/eip-2535#diamond-interface\\n\\n // __ReentrancyGuard_init_unchained\\n s._status = Constants.NOT_ENTERED;\\n s._xcallStatus = Constants.NOT_ENTERED;\\n\\n // Connext\\n s.domain = _domain;\\n s.LIQUIDITY_FEE_NUMERATOR = Constants.INITIAL_LIQUIDITY_FEE_NUMERATOR;\\n s.maxRoutersPerTransfer = Constants.INITIAL_MAX_ROUTERS;\\n s.xAppConnectionManager = manager;\\n s.lpTokenTargetAddress = _lpTokenTargetAddress;\\n }\\n}\\n\",\"keccak256\":\"0x9cefcbf8a3cc401958cf56f63870c588fe8146c12e265761d6bbfaece0cb5439\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xc92e38025a8eff9eafa17be136dd134e8b95060b7a258f840713d2a7d4b7fa85\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n /**\\n * @dev This emits when change in ownership of a contract is proposed.\\n */\\n event OwnershipProposed(address indexed proposedOwner);\\n\\n /**\\n * @dev This emits when ownership of a contract changes.\\n */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @notice Get the address of the owner\\n * @return owner_ The address of the owner.\\n */\\n function owner() external view returns (address owner_);\\n\\n /**\\n * @notice Get the address of the proposed owner\\n * @return proposed_ The address of the proposed.\\n */\\n function proposed() external view returns (address proposed_);\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n * @param newlyProposed The proposed new owner of the contract\\n */\\n function proposeNewOwner(address newlyProposed) external;\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n */\\n function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610365806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80639a7e155e14610030575b600080fd5b61004361003e3660046102bc565b610045565b005b60005460ff1615610069576040516318fc834360e21b815260040160405180910390fd5b610071610209565b60008390508463ffffffff16816001600160a01b0316638d3638f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100df919061030b565b63ffffffff161461010357604051631fdd17b360e11b815260040160405180910390fd5b6000805460ff191660011781556101377fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6301ffc9a760e01b600090815260038201602090815260408083208054600160ff199182168117909255636f5723a360e11b855282852080548216831790556348e2b09360e01b8552828520805482168317905563286b971b60e01b855291909320805490911683179055600690920195909555601685905560178590556004805463ffffffff191663ffffffff98909816979097179096555061270b9092556005600c5583546001600160a01b03199081166001600160a01b0393841617909455601a805490941691161790915550565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600401546001600160a01b031633146102895760405162461bcd60e51b815260206004820152601b60248201527f4c69624469616d6f6e643a2021636f6e7472616374206f776e65720000000000604482015260640160405180910390fd5b565b63ffffffff8116811461029d57600080fd5b50565b80356001600160a01b03811681146102b757600080fd5b919050565b600080600080608085870312156102d257600080fd5b84356102dd8161028b565b93506102eb602086016102a0565b925060408501359150610300606086016102a0565b905092959194509250565b60006020828403121561031d57600080fd5b81516103288161028b565b939250505056fea2646970667358221220eb1afab1ccd706cb3cdd67cf49343eb616558a6f616c6687b7c8c755ca9e0aff64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80639a7e155e14610030575b600080fd5b61004361003e3660046102bc565b610045565b005b60005460ff1615610069576040516318fc834360e21b815260040160405180910390fd5b610071610209565b60008390508463ffffffff16816001600160a01b0316638d3638f46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100df919061030b565b63ffffffff161461010357604051631fdd17b360e11b815260040160405180910390fd5b6000805460ff191660011781556101377fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6301ffc9a760e01b600090815260038201602090815260408083208054600160ff199182168117909255636f5723a360e11b855282852080548216831790556348e2b09360e01b8552828520805482168317905563286b971b60e01b855291909320805490911683179055600690920195909555601685905560178590556004805463ffffffff191663ffffffff98909816979097179096555061270b9092556005600c5583546001600160a01b03199081166001600160a01b0393841617909455601a805490941691161790915550565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c600401546001600160a01b031633146102895760405162461bcd60e51b815260206004820152601b60248201527f4c69624469616d6f6e643a2021636f6e7472616374206f776e65720000000000604482015260640160405180910390fd5b565b63ffffffff8116811461029d57600080fd5b50565b80356001600160a01b03811681146102b757600080fd5b919050565b600080600080608085870312156102d257600080fd5b84356102dd8161028b565b93506102eb602086016102a0565b925060408501359150610300606086016102a0565b905092959194509250565b60006020828403121561031d57600080fd5b81516103288161028b565b939250505056fea2646970667358221220eb1afab1ccd706cb3cdd67cf49343eb616558a6f616c6687b7c8c755ca9e0aff64736f6c63430008110033", + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/upgrade-initializers/DiamondInit.sol:DiamondInit", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/FraxtalSpokeConnectorStaging.json b/packages/deployments/contracts/deployments/fraxtal/FraxtalSpokeConnectorStaging.json new file mode 100644 index 0000000000..e6f95484f5 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/FraxtalSpokeConnectorStaging.json @@ -0,0 +1,2402 @@ +{ + "address": "0x9963a1E4fD60ba4a89E92930c8D8686514705BB6", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "mirrorDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "amb", + "type": "address" + }, + { + "internalType": "address", + "name": "rootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "mirrorConnector", + "type": "address" + }, + { + "internalType": "uint256", + "name": "processGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delayBlocks", + "type": "uint256" + }, + { + "internalType": "address", + "name": "merkle", + "type": "address" + }, + { + "internalType": "address", + "name": "watcherManager", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minDisputeBlocks", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "disputeBlocks", + "type": "uint256" + } + ], + "internalType": "struct SpokeConnector.ConstructorParams", + "name": "_baseSpokeParams", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_gasCap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "Connector__processMessage_notUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "RateLimited__rateLimited_messageSendRateExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_activateOptimisticMode__OptimisticModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_constructor__DisputeBlocksLowerThanMin", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__InvalidInputHash", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__ProposeInProgress", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_finalize__ProposedHashIsFinalizedHash", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_onlyOptimisticMode__SlowModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_onlyProposer__NotAllowlistedProposer", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_proposeAggregateRoot__ProposeInProgress", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_receiveAggregateRoot__OptimisticModeOn", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore", + "type": "error" + }, + { + "inputs": [], + "name": "SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_identityOOG", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_invalidPointer", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__unsafeCopyTo_nullPointer", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "rootTimestamp", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "endOfDispute", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + } + ], + "name": "AggregateRootProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootReceived", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + } + ], + "name": "AggregateRootVerified", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "DelayBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "name": "Dispatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + } + ], + "name": "DisputeBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FundsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "GasCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageProcessed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "aggregateIndex", + "type": "uint256" + } + ], + "name": "MessageProven", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "encodedData", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageSent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + } + ], + "name": "MinDisputeBlocksUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previous", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "current", + "type": "address" + } + ], + "name": "MirrorConnectorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "mirrorDomain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "amb", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "rootManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "mirrorConnector", + "type": "address" + } + ], + "name": "NewConnector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "OptimisticModeActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + } + ], + "name": "PendingAggregateRootDeleted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "returnData", + "type": "bytes" + } + ], + "name": "Process", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "aggregateRoot", + "type": "bytes32" + } + ], + "name": "ProposedRootFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposer", + "type": "address" + } + ], + "name": "ProposerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposer", + "type": "address" + } + ], + "name": "ProposerRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updater", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRateLimit", + "type": "uint256" + } + ], + "name": "SendRateLimitUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "SenderRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "SlowModeActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "snapshotId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "SnapshotRootSaved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcherManager", + "type": "address" + } + ], + "name": "WatcherManagerChanged", + "type": "event" + }, + { + "inputs": [], + "name": "AMB", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FINALIZED_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MERKLE", + "outputs": [ + { + "internalType": "contract MerkleTreeManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIRROR_DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROCESS_GAS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RESERVE_GAS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROOT_MANAGER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "activateOptimisticMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "activateSlowMode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_proposer", + "type": "address" + } + ], + "name": "addProposer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "addSender", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowlistedProposers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowlistedSenders", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delayBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_destinationDomain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_recipientAddress", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_messageBody", + "type": "bytes" + } + ], + "name": "dispatch", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disputeBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_proposedAggregateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_rootTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_endOfDispute", + "type": "uint256" + } + ], + "name": "finalize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gasCap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getLastCompletedSnapshotId", + "outputs": [ + { + "internalType": "uint256", + "name": "_lastCompletedSnapshotId", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSnapshotDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "_snapshotDuration", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "home", + "outputs": [ + { + "internalType": "contract IOutbox", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_potentialReplica", + "type": "address" + } + ], + "name": "isReplica", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastSentBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "localDomain", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minDisputeBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mirrorConnector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "optimisticMode", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "outboundRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "pendingAggregateRoots", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "processMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_aggregateRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_rootTimestamp", + "type": "uint256" + } + ], + "name": "proposeAggregateRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedAggregateRootHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32[32]", + "name": "path", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "internalType": "struct SpokeConnector.Proof[]", + "name": "_proofs", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "_aggregateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32[32]", + "name": "_aggregatePath", + "type": "bytes32[32]" + }, + { + "internalType": "uint256", + "name": "_aggregateIndex", + "type": "uint256" + } + ], + "name": "proveAndProcess", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "provenAggregateRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "provenMessageRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rateLimitBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_fraudulentRoot", + "type": "bytes32" + } + ], + "name": "removePendingAggregateRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_proposer", + "type": "address" + } + ], + "name": "removeProposer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "removeSender", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_encodedData", + "type": "bytes" + } + ], + "name": "send", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "sentMessageRoots", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_delayBlocks", + "type": "uint256" + } + ], + "name": "setDelayBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_disputeBlocks", + "type": "uint256" + } + ], + "name": "setDisputeBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasCap", + "type": "uint256" + } + ], + "name": "setGasCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minDisputeBlocks", + "type": "uint256" + } + ], + "name": "setMinDisputeBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_mirrorConnector", + "type": "address" + } + ], + "name": "setMirrorConnector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rateLimit", + "type": "uint256" + } + ], + "name": "setRateLimitBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcherManager", + "type": "address" + } + ], + "name": "setWatcherManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "snapshotRoots", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_expected", + "type": "address" + } + ], + "name": "verifySender", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "watcherManager", + "outputs": [ + { + "internalType": "contract WatcherManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "withdrawFunds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xb5b3eb295ce3a095235db704e133f0d304bc280ec27a5b6c9114f8b31ecf6252", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x9963a1E4fD60ba4a89E92930c8D8686514705BB6", + "transactionIndex": 1, + "gasUsed": "3943969", + "logsBloom": "0x00800000000000000000000008000000000000000000401000800000000000000000400000000000000000020004000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000040000000000000020000000000000000000800000000000010000000000000000000400000000000000000000000000000000000000000000040000000000000000000000000000000080000008000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000001020000000000000200000000000040000000000000000080002000000000000000000", + "blockHash": "0xd37d2561966ef51b310f047e4cded95aae607fcb31f1ce1f721becf9692754c2", + "transactionHash": "0xb5b3eb295ce3a095235db704e133f0d304bc280ec27a5b6c9114f8b31ecf6252", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2889776, + "transactionHash": "0xb5b3eb295ce3a095235db704e133f0d304bc280ec27a5b6c9114f8b31ecf6252", + "address": "0x9963a1E4fD60ba4a89E92930c8D8686514705BB6", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xd37d2561966ef51b310f047e4cded95aae607fcb31f1ce1f721becf9692754c2" + }, + { + "transactionIndex": 1, + "blockNumber": 2889776, + "transactionHash": "0xb5b3eb295ce3a095235db704e133f0d304bc280ec27a5b6c9114f8b31ecf6252", + "address": "0x9963a1E4fD60ba4a89E92930c8D8686514705BB6", + "topics": [ + "0x4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f0", + "0x0000000000000000000000000000000000000000000000000000000066726178", + "0x0000000000000000000000000000000000000000000000000000000000657468" + ], + "data": "0x00000000000000000000000042000000000000000000000000000000000000070000000000000000000000000031d290b8526e2eb6ac22111e5ff96eca7602580000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 1, + "blockHash": "0xd37d2561966ef51b310f047e4cded95aae607fcb31f1ce1f721becf9692754c2" + }, + { + "transactionIndex": 1, + "blockNumber": 2889776, + "transactionHash": "0xb5b3eb295ce3a095235db704e133f0d304bc280ec27a5b6c9114f8b31ecf6252", + "address": "0x9963a1E4fD60ba4a89E92930c8D8686514705BB6", + "topics": [ + "0x877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf850", + "logIndex": 2, + "blockHash": "0xd37d2561966ef51b310f047e4cded95aae607fcb31f1ce1f721becf9692754c2" + } + ], + "blockNumber": 2889776, + "cumulativeGasUsed": "3994531", + "status": 1, + "byzantium": true + }, + "args": [ + { + "domain": "1718772088", + "mirrorDomain": "6648936", + "amb": "0x4200000000000000000000000000000000000007", + "rootManager": "0x0031d290B8526e2Eb6ac22111E5fF96EcA760258", + "mirrorConnector": "0x0000000000000000000000000000000000000000", + "processGas": "850000", + "reserveGas": "15000", + "delayBlocks": 900, + "merkle": "0x955D1693C64e5a0746130FF6F6653E2171cC6708", + "watcherManager": "0x35866ab2D6BAdFF580895c883a4535e928AB7db9", + "minDisputeBlocks": 900, + "disputeBlocks": 900 + }, + "850000" + ], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"processGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delayBlocks\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"merkle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minDisputeBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"disputeBlocks\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.ConstructorParams\",\"name\":\"_baseSpokeParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Connector__processMessage_notUsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimited__rateLimited_messageSendRateExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_activateOptimisticMode__OptimisticModeOn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_constructor__DisputeBlocksLowerThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_finalize__InvalidInputHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_finalize__ProposeInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_finalize__ProposedHashIsFinalizedHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_onlyOptimisticMode__SlowModeOn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_onlyProposer__NotAllowlistedProposer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_proposeAggregateRoot__ProposeInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_receiveAggregateRoot__OptimisticModeOn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_identityOOG\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_invalidPointer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__unsafeCopyTo_nullPointer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"rootTimestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"endOfDispute\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"}],\"name\":\"AggregateRootProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"AggregateRootVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"DelayBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Dispatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"}],\"name\":\"DisputeBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"GasCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"MessageProven\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previous\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"}],\"name\":\"MinDisputeBlocksUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"current\",\"type\":\"address\"}],\"name\":\"MirrorConnectorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"mirrorDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"amb\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"mirrorConnector\",\"type\":\"address\"}],\"name\":\"NewConnector\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"OptimisticModeActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"}],\"name\":\"PendingAggregateRootDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"Process\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"aggregateRoot\",\"type\":\"bytes32\"}],\"name\":\"ProposedRootFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"}],\"name\":\"ProposerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposer\",\"type\":\"address\"}],\"name\":\"ProposerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRateLimit\",\"type\":\"uint256\"}],\"name\":\"SendRateLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"watcher\",\"type\":\"address\"}],\"name\":\"SlowModeActivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"SnapshotRootSaved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcherManager\",\"type\":\"address\"}],\"name\":\"WatcherManagerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"AMB\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZED_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MERKLE\",\"outputs\":[{\"internalType\":\"contract MerkleTreeManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIRROR_DOMAIN\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROCESS_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVE_GAS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROOT_MANAGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateOptimisticMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateSlowMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"}],\"name\":\"addProposer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"addSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedProposers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowlistedSenders\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delayBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_messageBody\",\"type\":\"bytes\"}],\"name\":\"dispatch\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposedAggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_rootTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endOfDispute\",\"type\":\"uint256\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasCap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastCompletedSnapshotId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_lastCompletedSnapshotId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSnapshotDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_snapshotDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"home\",\"outputs\":[{\"internalType\":\"contract IOutbox\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_potentialReplica\",\"type\":\"address\"}],\"name\":\"isReplica\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastSentBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minDisputeBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mirrorConnector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimisticMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"outboundRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"pendingAggregateRoots\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_rootTimestamp\",\"type\":\"uint256\"}],\"name\":\"proposeAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedAggregateRootHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct SpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenAggregateRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rateLimitBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_fraudulentRoot\",\"type\":\"bytes32\"}],\"name\":\"removePendingAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"}],\"name\":\"removeProposer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"removeSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sentMessageRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_delayBlocks\",\"type\":\"uint256\"}],\"name\":\"setDelayBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_disputeBlocks\",\"type\":\"uint256\"}],\"name\":\"setDisputeBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_gasCap\",\"type\":\"uint256\"}],\"name\":\"setGasCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minDisputeBlocks\",\"type\":\"uint256\"}],\"name\":\"setMinDisputeBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mirrorConnector\",\"type\":\"address\"}],\"name\":\"setMirrorConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rateLimit\",\"type\":\"uint256\"}],\"name\":\"setRateLimitBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcherManager\",\"type\":\"address\"}],\"name\":\"setWatcherManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"snapshotRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expected\",\"type\":\"address\"}],\"name\":\"verifySender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"watcherManager\",\"outputs\":[{\"internalType\":\"contract WatcherManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"activateSlowMode()\":{\"details\":\"Sets the proposed aggregate root hash to FINALIZED_HASH, invalidating it.\"},\"addProposer(address)\":{\"details\":\"Only allowlisted proposers can call `proposeAggregateRoot`.\"},\"addSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\",\"params\":{\"_sender\":\"Sender to whitelist\"}},\"dispatch(uint32,bytes32,bytes)\":{\"details\":\"The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains.This function is also in charge of saving the snapshot root when needed. If the message being added to the tree is the first of the current period this means the last snapshot finished and its root must be saved. The saving happens before adding the new message to the tree. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\",\"params\":{\"_destinationDomain\":\"Domain message is intended for\",\"_messageBody\":\"Message contents\",\"_recipientAddress\":\"Address for message recipient\"}},\"finalize(bytes32,uint256,uint256)\":{\"details\":\"Finalized roots won't be monitored by off-chain agents as they are deemed valid.\",\"params\":{\"_endOfDispute\":\"The block in which the dispute period for proposedAggregateRootHash concludes\",\"_proposedAggregateRoot\":\"The aggregate root currently proposed\"}},\"getLastCompletedSnapshotId()\":{\"details\":\"The value is calculated through an internal function to reuse code and save gas\",\"returns\":{\"_lastCompletedSnapshotId\":\"The last completed snapshot id\"}},\"getSnapshotDuration()\":{\"returns\":{\"_snapshotDuration\":\"The duration of the snapshot\"}},\"home()\":{\"details\":\"The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad\",\"returns\":{\"_0\":\"The local inbox contract\"}},\"isReplica(address)\":{\"returns\":{\"_0\":\"True if _potentialReplica is an enrolled Replica\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage(bytes)\":{\"details\":\"This is called by AMBs to process messages originating from mirror connector\"},\"proposeAggregateRoot(bytes32,uint256)\":{\"details\":\"_rootTimestamp is required for off-chain agents to be able to know which root they should fetch from the root manager contract in order to compare it with the one being proposed. The off-chain agents should also ensure the proposed root is not an old one.\",\"params\":{\"_aggregateRoot\":\"The aggregate root to propose.\",\"_rootTimestamp\":\"Block.timestamp at which the root was finalized in the root manager contract.\"}},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"details\":\"Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.\",\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removePendingAggregateRoot(bytes32)\":{\"details\":\"This method is required for handling fraud cases in the current construction. Specifically, this will protect against a fraudulent aggregate root getting transported, not fraudulent roots that constitute a given aggregate root (i.e. can protect against fraudulent hub -> spoke transport, not spoke -> hub transport).\",\"params\":{\"_fraudulentRoot\":\"Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping.\"}},\"removeProposer(address)\":{\"details\":\"Only allowlisted proposers can call `proposeAggregateRoot`.\"},\"removeSender(address)\":{\"details\":\"Only allowlisted routers (senders) can call `dispatch`.\",\"params\":{\"_sender\":\"Sender to remove from whitelist\"}},\"send(bytes)\":{\"params\":{\"_encodedData\":\"Data needed to send crosschain message by associated amb\"}},\"setDelayBlocks(uint256)\":{\"params\":{\"_delayBlocks\":\"Updated delay block value\"}},\"setRateLimitBlocks(uint256)\":{\"details\":\"Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\",\"params\":{\"_rateLimit\":\"The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled.\"}},\"withdrawFunds(address)\":{\"details\":\"Withdraws the entire balance of the contract.\",\"params\":{\"_to\":\"The recipient of the funds withdrawn\"}}},\"version\":1},\"userdoc\":{\"events\":{\"AggregateRootProposed(bytes32,uint256,uint256,uint32)\":{\"notice\":\"Emitted when a new aggregate root is proposed\"},\"AggregateRootReceived(bytes32)\":{\"notice\":\"Emitted when a new aggregate root is delivered from the hub\"},\"AggregateRootRemoved(bytes32)\":{\"notice\":\"Emitted when a proposed aggregate root is removed by admin\"},\"AggregateRootVerified(bytes32)\":{\"notice\":\"Emitted when an aggregate root has made it through the fraud period without being disputed\"},\"DelayBlocksUpdated(uint256,address)\":{\"notice\":\"Emitted when the admin updates the delay blocks\"},\"Dispatch(bytes32,uint256,bytes32,bytes)\":{\"notice\":\"Emitted when a message is sent (leaf added to outbound root)\"},\"DisputeBlocksUpdated(uint256,uint256)\":{\"notice\":\"Emitted when the number of dispute blocks is updated\"},\"FundsWithdrawn(address,uint256)\":{\"notice\":\"Emitted when funds are withdrawn by the admin\"},\"GasCapUpdated(uint256,uint256)\":{\"notice\":\"Emitted when admin updates the gas cap\"},\"MessageProcessed(bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully received over an AMB\"},\"MessageProven(bytes32,bytes32,uint256)\":{\"notice\":\"Emitted when a message (outbound root from different spoke) is proven against the aggregate root\"},\"MessageSent(bytes,bytes,address)\":{\"notice\":\"Emitted whenever a message is successfully sent over an AMB\"},\"MinDisputeBlocksUpdated(uint256,uint256)\":{\"notice\":\"Emitted whem the number of minimum dispute blocks is updated\"},\"OptimisticModeActivated()\":{\"notice\":\"Emitted when optimistic mode is activated\"},\"PendingAggregateRootDeleted(bytes32)\":{\"notice\":\"Emitted when a pending aggregate root is deleted from the pendingAggregateRoots mapping\"},\"Process(bytes32,bool,bytes)\":{\"notice\":\"Emitted when a message is handled (this is the destination domain)\"},\"ProposedRootFinalized(bytes32)\":{\"notice\":\"Emitted when the current proposed root is finalized\"},\"ProposerAdded(address)\":{\"notice\":\"Emitted when a new proposer is added\"},\"ProposerRemoved(address)\":{\"notice\":\"Emitted when a proposer is removed\"},\"SenderAdded(address)\":{\"notice\":\"Emitted when a new sender is whitelisted for messaging\"},\"SenderRemoved(address)\":{\"notice\":\"Emitted when a new sender is de-whitelisted for messaging\"},\"SlowModeActivated(address)\":{\"notice\":\"Emitted when slow mode is activated\"},\"WatcherManagerChanged(address)\":{\"notice\":\"Emitted when the manager address changes\"}},\"kind\":\"user\",\"methods\":{\"AMB()\":{\"notice\":\"Address of the AMB on this domain.\"},\"DOMAIN()\":{\"notice\":\"The domain of this Messaging (i.e. Connector) contract.\"},\"FINALIZED_HASH()\":{\"notice\":\"Hash used to keep the proposal slot warm once a given proposal has been finalized.\"},\"MERKLE()\":{\"notice\":\"MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution.\"},\"MIRROR_DOMAIN()\":{\"notice\":\"The domain of the corresponding messaging (i.e. Connector) contract.\"},\"PROCESS_GAS()\":{\"notice\":\"Minimum gas for processing a received message (reserved for handle)\"},\"RESERVE_GAS()\":{\"notice\":\"Reserved gas (to ensure tx completes in case message processing runs out)\"},\"ROOT_MANAGER()\":{\"notice\":\"RootManager contract address.\"},\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"activateOptimisticMode()\":{\"notice\":\"Owner can set the system to optimistic mode.\"},\"activateSlowMode()\":{\"notice\":\"Watcher can set the system in slow mode.\"},\"addProposer(address)\":{\"notice\":\"Adds a proposer to the allowlist.\"},\"addSender(address)\":{\"notice\":\"Adds a sender to the allowlist.\"},\"allowlistedProposers(address)\":{\"notice\":\"This is used for the `onlyProposers` modifier, which gates who can propose new roots using `proposeAggregateRoot`.\"},\"allowlistedSenders(address)\":{\"notice\":\"Records all whitelisted senders\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"delayBlocks()\":{\"notice\":\"Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary.\"},\"dispatch(uint32,bytes32,bytes)\":{\"notice\":\"This function adds transfers to the outbound transfer merkle tree.\"},\"finalize(bytes32,uint256,uint256)\":{\"notice\":\"Finalizes the proposed aggregate root. This confirms the root validity. Therefore, it can be proved and processed.\"},\"gasCap()\":{\"notice\":\"The gnosis amb requires destination gas to be specified on the origin. The gas used will be passed in by the relayer to allow for real-time estimates, but will be capped at the admin-set cap.\"},\"getLastCompletedSnapshotId()\":{\"notice\":\"This function gets the last completed snapshot id\"},\"getSnapshotDuration()\":{\"notice\":\"Get the duration of the snapshot\"},\"home()\":{\"notice\":\"Get the local inbox contract from the xAppConnectionManager\"},\"isReplica(address)\":{\"notice\":\"Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\"},\"lastSentBlock()\":{\"notice\":\"Tracks the last block that we sent a message.\"},\"localDomain()\":{\"notice\":\"This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly\"},\"minDisputeBlocks()\":{\"notice\":\"The minimum number of blocks disputeBlocks can be set to.\"},\"mirrorConnector()\":{\"notice\":\"Connector on L2 for L1 connectors, and vice versa.\"},\"optimisticMode()\":{\"notice\":\"True if the system is working in optimistic mode. Otherwise is working in slow mode\"},\"outboundRoot()\":{\"notice\":\"This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"pause()\":{\"notice\":\"Watchers can pause contracts if fraud is detected\"},\"pendingAggregateRoots(bytes32)\":{\"notice\":\"This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages.\"},\"processMessage(bytes)\":{\"notice\":\"Processes a message received by an AMB\"},\"proposeAggregateRoot(bytes32,uint256)\":{\"notice\":\"Propose a new aggregate root\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedAggregateRootHash()\":{\"notice\":\"The resulting hash of keccaking the proposed aggregate root, the timestamp at which it was finalized in the root manager and the block at which the time to dispute it ends.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)\":{\"notice\":\"Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution.\"},\"provenAggregateRoots(bytes32)\":{\"notice\":\"This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period.\"},\"provenMessageRoots(bytes32)\":{\"notice\":\"This tracks whether the root has been proven to exist within the given aggregate root.\"},\"rateLimitBlocks()\":{\"notice\":\"The number of blocks required between message sending events.\"},\"removePendingAggregateRoot(bytes32)\":{\"notice\":\"Manually remove a pending aggregateRoot by owner if the contract is paused.\"},\"removeProposer(address)\":{\"notice\":\"Removes a proposer from the allowlist.\"},\"removeSender(address)\":{\"notice\":\"Removes a sender from the allowlist.\"},\"renounceOwnership()\":{\"notice\":\"Should not be able to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"send(bytes)\":{\"notice\":\"This dispatches outbound root to hub via AMB\"},\"sentMessageRoots(bytes32)\":{\"notice\":\"This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub.\"},\"setDelayBlocks(uint256)\":{\"notice\":\"Set the `delayBlocks`, the period in blocks over which an incoming message is verified.\"},\"setDisputeBlocks(uint256)\":{\"notice\":\"Set the `disputeBlocks`, the duration, in blocks, of the dispute process for a given proposed root\"},\"setMinDisputeBlocks(uint256)\":{\"notice\":\"Set the `minDisputeBlocks` variable to the provided parameter.\"},\"setMirrorConnector(address)\":{\"notice\":\"Sets the address of the l2Connector for this domain\"},\"setRateLimitBlocks(uint256)\":{\"notice\":\"Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method.\"},\"setWatcherManager(address)\":{\"notice\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"snapshotRoots(uint256)\":{\"notice\":\"Mapping of the snapshot roots for a specific index. Used for data availability for off-chain scripts\"},\"unpause()\":{\"notice\":\"Owner can unpause contracts if fraud is detected by watchers\"},\"verifySender(address)\":{\"notice\":\"Checks the cross domain sender for a given address\"},\"watcherManager()\":{\"notice\":\"The `WatcherManager` contract governs the watcher allowlist.\"},\"withdrawFunds(address)\":{\"notice\":\"This function should be callable by owner, and send funds trapped on a connector to the provided recipient.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol\":\"OptimismSpokeConnector\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n _requireNotPaused();\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n _requirePaused();\\n _;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Throws if the contract is paused.\\n */\\n function _requireNotPaused() internal view virtual {\\n require(!paused(), \\\"Pausable: paused\\\");\\n }\\n\\n /**\\n * @dev Throws if the contract is not paused.\\n */\\n function _requirePaused() internal view virtual {\\n require(paused(), \\\"Pausable: not paused\\\");\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n // ========== Custom Errors ===========\\n\\n error MerkleTreeManager__renounceOwnership_prohibited();\\n error MerkleTreeManager__setArborist_zeroAddress();\\n error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n // ============ Events ============\\n\\n event ArboristUpdated(address previous, address updated);\\n\\n event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n // ============ Structs ============\\n\\n // Status of Message:\\n // 0 - None - message has not been proven or processed\\n // 1 - Proven - message inclusion proof has been validated\\n // 2 - Processed - message has been dispatched to recipient\\n enum LeafStatus {\\n None,\\n Proven,\\n Processed\\n }\\n\\n // ============ Libraries ============\\n\\n using MerkleLib for MerkleLib.Tree;\\n\\n // ============ Public Storage ============\\n\\n /**\\n * @notice Core data structure with which this contract is tasked with keeping custody.\\n * Writable only by the designated arborist.\\n */\\n MerkleLib.Tree public tree;\\n\\n /**\\n * @notice The arborist contract that has permission to write to this tree.\\n * @dev This could be the root manager contract or a spoke connector contract, for example.\\n */\\n address public arborist;\\n\\n /**\\n * @notice The leaves that are proven already\\n */\\n mapping(bytes32 => LeafStatus) public leaves;\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n mapping(uint32 => uint32) public nonces;\\n\\n // ============ Modifiers ============\\n\\n modifier onlyArborist() {\\n require(arborist == msg.sender, \\\"!arborist\\\");\\n _;\\n }\\n\\n // ============ Getters ============\\n\\n /**\\n * @notice Returns the current branch.\\n */\\n function branch() public view returns (bytes32[32] memory) {\\n return tree.branch;\\n }\\n\\n /**\\n * @notice Calculates and returns the current root.\\n */\\n function root() public view returns (bytes32) {\\n return tree.root();\\n }\\n\\n /**\\n * @notice Returns the number of inserted leaves in the tree (current index).\\n */\\n function count() public view returns (uint256) {\\n return tree.count;\\n }\\n\\n /**\\n * @notice Convenience getter: returns the root and count.\\n */\\n function rootAndCount() public view returns (bytes32, uint256) {\\n return (tree.root(), tree.count);\\n }\\n\\n // ======== Initializer =========\\n\\n function initialize(address _arborist) public initializer {\\n __MerkleTreeManager_init(_arborist);\\n __ProposedOwnable_init();\\n }\\n\\n /**\\n * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n */\\n function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n __MerkleTreeManager_init_unchained(_arborist);\\n }\\n\\n function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n arborist = _arborist;\\n }\\n\\n // ============ Admin Functions ==============\\n\\n /**\\n * @notice Method for the current arborist to assign write permissions to a new arborist.\\n * @param newArborist The new address to set as the current arborist.\\n */\\n function setArborist(address newArborist) external onlyOwner {\\n if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n address current = arborist;\\n if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n // Emit updated event\\n emit ArboristUpdated(current, newArborist);\\n\\n arborist = newArborist;\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as there is a possibility the\\n * arborist may change.\\n */\\n function renounceOwnership() public virtual override onlyOwner {\\n revert MerkleTreeManager__renounceOwnership_prohibited();\\n }\\n\\n // ========= Public Functions =========\\n\\n /**\\n * @notice Used to increment nonce\\n * @param _domain The domain the nonce will be used for\\n * @return _nonce The incremented nonce\\n */\\n function incrementNonce(uint32 _domain) public onlyArborist returns (uint32 _nonce) {\\n _nonce = nonces[_domain]++;\\n }\\n\\n /**\\n * @notice Used to track proven leaves\\n * @param _leaf The leaf to mark as proven\\n */\\n function markAsProven(bytes32 _leaf) public onlyArborist {\\n require(leaves[_leaf] == LeafStatus.None, \\\"!empty\\\");\\n leaves[_leaf] = LeafStatus.Proven;\\n }\\n\\n /**\\n * @notice Used to track processed leaves\\n * @param _leaf The leaf to mark as proven\\n */\\n function markAsProcessed(bytes32 _leaf) public onlyArborist {\\n require(leaves[_leaf] == LeafStatus.Proven, \\\"!proven\\\");\\n leaves[_leaf] = LeafStatus.Processed;\\n }\\n\\n /**\\n * @notice Inserts the given leaves into the tree.\\n * @param _leaves The leaves to be inserted into the tree.\\n * @return _root Current root for convenience.\\n * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n * provided for convenience.\\n */\\n function insert(bytes32[] memory _leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n MerkleLib.Tree memory _tree = tree;\\n\\n uint256 leafCount = _leaves.length;\\n for (uint256 i; i < leafCount; ) {\\n // Insert the new node (using in-memory method).\\n _tree = _tree.insert(_leaves[i]);\\n unchecked {\\n ++i;\\n }\\n }\\n // Write the newly updated tree to storage.\\n tree = _tree;\\n\\n // Get return details for convenience.\\n _count = _tree.count;\\n // NOTE: Root calculation method currently reads from storage only.\\n _root = tree.root();\\n\\n emit LeavesInserted(_root, _count, _leaves);\\n }\\n\\n /**\\n * @notice Inserts the given leaf into the tree.\\n * @param leaf The leaf to be inserted into the tree.\\n * @return _root Current root for convenience.\\n * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n * provided for convenience.\\n */\\n function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n // Insert the new node.\\n tree = tree.insert(leaf);\\n _count = tree.count;\\n _root = tree.root();\\n\\n emit LeafInserted(_root, _count, leaf);\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[46] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6c85e8e6df2192fd4d8099efbbb8b3ff40211b777174a99abe5e6d60f9529a3c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n // ============ Events ============\\n /**\\n * @notice Emitted when the manager address changes\\n * @param watcherManager The updated manager\\n */\\n event WatcherManagerChanged(address watcherManager);\\n\\n // ============ Properties ============\\n /**\\n * @notice The `WatcherManager` contract governs the watcher allowlist.\\n * @dev Multiple clients can share a watcher set using the same manager\\n */\\n WatcherManager public watcherManager;\\n\\n // ============ Constructor ============\\n constructor(address _watcherManager) ProposedOwnable() {\\n watcherManager = WatcherManager(_watcherManager);\\n }\\n\\n // ============ Modifiers ============\\n /**\\n * @notice Enforces the sender is the watcher\\n */\\n modifier onlyWatcher() {\\n require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n _;\\n }\\n\\n // ============ Admin fns ============\\n /**\\n * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n */\\n function setWatcherManager(address _watcherManager) external onlyOwner {\\n require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n watcherManager = WatcherManager(_watcherManager);\\n emit WatcherManagerChanged(_watcherManager);\\n }\\n\\n /**\\n * @notice Owner can unpause contracts if fraud is detected by watchers\\n */\\n function unpause() external onlyOwner whenPaused {\\n _unpause();\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as only the owner\\n * is able to unpause the contracts. You can still propose `address(0)`,\\n * but it will never be accepted.\\n */\\n function renounceOwnership() public virtual override onlyOwner {\\n require(false, \\\"prohibited\\\");\\n }\\n\\n // ============ Watcher fns ============\\n\\n /**\\n * @notice Watchers can pause contracts if fraud is detected\\n */\\n function pause() external onlyWatcher whenNotPaused {\\n _pause();\\n }\\n}\\n\",\"keccak256\":\"0xe9c9a71695f8c4b93d5d59b719f162c805cd85879aad5f4175b6fa7a3236df95\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n // ============ Events ============\\n event WatcherAdded(address watcher);\\n\\n event WatcherRemoved(address watcher);\\n\\n // ============ Properties ============\\n mapping(address => bool) public isWatcher;\\n\\n // ============ Constructor ============\\n constructor() ProposedOwnable() {\\n _setOwner(msg.sender);\\n }\\n\\n // ============ Modifiers ============\\n\\n // ============ Admin fns ============\\n /**\\n * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n */\\n function addWatcher(address _watcher) external onlyOwner {\\n require(!isWatcher[_watcher], \\\"already watcher\\\");\\n isWatcher[_watcher] = true;\\n emit WatcherAdded(_watcher);\\n }\\n\\n /**\\n * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n */\\n function removeWatcher(address _watcher) external onlyOwner {\\n require(isWatcher[_watcher], \\\"!exist\\\");\\n delete isWatcher[_watcher];\\n emit WatcherRemoved(_watcher);\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as the watcher griefing\\n * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n */\\n function renounceOwnership() public virtual override onlyOwner {\\n require(false, \\\"prohibited\\\");\\n }\\n}\\n\",\"keccak256\":\"0x31457ca4d8f4f3270d6cc85e049f2ebf134bd094c995ad0856892d23dd8cdf84\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/Connector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\nimport {IConnector} from \\\"../interfaces/IConnector.sol\\\";\\n\\n/**\\n * @title Connector\\n * @author Connext Labs, Inc.\\n * @notice This contract has the messaging interface functions used by all connectors.\\n *\\n * @dev This contract stores information about mirror connectors, but can be used as a\\n * base for contracts that do not have a mirror (i.e. the connector handling messaging on\\n * mainnet). In this case, the `mirrorConnector` and `MIRROR_DOMAIN`\\n * will be empty\\n *\\n * @dev If ownership is renounced, this contract will be unable to update its `mirrorConnector`\\n * or `mirrorGas`\\n */\\nabstract contract Connector is ProposedOwnable, IConnector {\\n // ========== Custom Errors ===========\\n\\n error Connector__processMessage_notUsed();\\n\\n // ============ Events ============\\n\\n event NewConnector(\\n uint32 indexed domain,\\n uint32 indexed mirrorDomain,\\n address amb,\\n address rootManager,\\n address mirrorConnector\\n );\\n\\n event MirrorConnectorUpdated(address previous, address current);\\n\\n /**\\n * @notice Emitted when funds are withdrawn by the admin\\n * @dev See comments in `withdrawFunds`\\n * @param to The recipient of the funds\\n * @param amount The amount withdrawn\\n */\\n event FundsWithdrawn(address indexed to, uint256 amount);\\n\\n // ============ Public Storage ============\\n\\n /**\\n * @notice The domain of this Messaging (i.e. Connector) contract.\\n */\\n uint32 public immutable DOMAIN;\\n\\n /**\\n * @notice Address of the AMB on this domain.\\n */\\n address public immutable AMB;\\n\\n /**\\n * @notice RootManager contract address.\\n */\\n address public immutable ROOT_MANAGER;\\n\\n /**\\n * @notice The domain of the corresponding messaging (i.e. Connector) contract.\\n */\\n uint32 public immutable MIRROR_DOMAIN;\\n\\n /**\\n * @notice Connector on L2 for L1 connectors, and vice versa.\\n */\\n address public mirrorConnector;\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Errors if the msg.sender is not the registered AMB\\n */\\n modifier onlyAMB() {\\n require(msg.sender == AMB, \\\"!AMB\\\");\\n _;\\n }\\n\\n /**\\n * @notice Errors if the msg.sender is not the registered ROOT_MANAGER\\n */\\n modifier onlyRootManager() {\\n // NOTE: RootManager will be zero address for spoke connectors.\\n // Only root manager can dispatch a message to spokes/L2s via the hub connector.\\n require(msg.sender == ROOT_MANAGER, \\\"!rootManager\\\");\\n _;\\n }\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Creates a new HubConnector instance\\n * @dev The connectors are deployed such that there is one on each side of an AMB (i.e.\\n * for optimism, there is one connector on optimism and one connector on mainnet)\\n * @param _domain The domain this connector lives on\\n * @param _mirrorDomain The spoke domain\\n * @param _amb The address of the amb on the domain this connector lives on\\n * @param _rootManager The address of the RootManager on mainnet\\n * @param _mirrorConnector The address of the spoke connector\\n */\\n constructor(\\n uint32 _domain,\\n uint32 _mirrorDomain,\\n address _amb,\\n address _rootManager,\\n address _mirrorConnector\\n ) ProposedOwnable() {\\n // set the owner\\n _setOwner(msg.sender);\\n\\n // sanity checks on values\\n require(_domain != 0, \\\"empty domain\\\");\\n require(_rootManager != address(0), \\\"empty rootManager\\\");\\n // see note at top of contract on why the mirror values are not sanity checked\\n\\n // set immutables\\n DOMAIN = _domain;\\n AMB = _amb;\\n ROOT_MANAGER = _rootManager;\\n MIRROR_DOMAIN = _mirrorDomain;\\n // set mutables if defined\\n if (_mirrorConnector != address(0)) {\\n _setMirrorConnector(_mirrorConnector);\\n }\\n\\n emit NewConnector(_domain, _mirrorDomain, _amb, _rootManager, _mirrorConnector);\\n }\\n\\n // ============ Receivable ============\\n /**\\n * @notice Connectors may need to receive native asset to handle fees when sending a\\n * message\\n */\\n receive() external payable {}\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Sets the address of the l2Connector for this domain\\n */\\n function setMirrorConnector(address _mirrorConnector) public onlyOwner {\\n _setMirrorConnector(_mirrorConnector);\\n }\\n\\n /**\\n * @notice This function should be callable by owner, and send funds trapped on\\n * a connector to the provided recipient.\\n * @dev Withdraws the entire balance of the contract.\\n *\\n * @param _to The recipient of the funds withdrawn\\n */\\n function withdrawFunds(address _to) public onlyOwner {\\n uint256 amount = address(this).balance;\\n Address.sendValue(payable(_to), amount);\\n emit FundsWithdrawn(_to, amount);\\n }\\n\\n // ============ Public Functions ============\\n\\n /**\\n * @notice Processes a message received by an AMB\\n * @dev This is called by AMBs to process messages originating from mirror connector\\n */\\n function processMessage(bytes memory _data) external virtual onlyAMB {\\n _processMessage(_data);\\n emit MessageProcessed(_data, msg.sender);\\n }\\n\\n /**\\n * @notice Checks the cross domain sender for a given address\\n */\\n function verifySender(address _expected) external returns (bool) {\\n return _verifySender(_expected);\\n }\\n\\n // ============ Virtual Functions ============\\n\\n /**\\n * @notice This function is used by the Connext contract on the l2 domain to send a message to the\\n * l1 domain (i.e. called by Connext on optimism to send a message to mainnet with roots)\\n * @param _data The contents of the message\\n * @param _encodedData Data used to send the message; specific to connector\\n */\\n function _sendMessage(bytes memory _data, bytes memory _encodedData) internal virtual;\\n\\n /**\\n * @notice This function is used by the AMBs to handle incoming messages. Should store the latest\\n * root generated on the l2 domain.\\n */\\n function _processMessage(\\n bytes memory /* _data */\\n ) internal virtual {\\n // By default, reverts. This is to ensure the call path is not used unless this function is\\n // overridden by the inheriting class\\n revert Connector__processMessage_notUsed();\\n }\\n\\n /**\\n * @notice Verify that the msg.sender is the correct AMB contract, and that the message's origin sender\\n * is the expected address.\\n * @dev Should be overridden by the implementing Connector contract.\\n */\\n function _verifySender(address _expected) internal virtual returns (bool);\\n\\n // ============ Private Functions ============\\n\\n function _setMirrorConnector(address _mirrorConnector) internal virtual {\\n emit MirrorConnectorUpdated(mirrorConnector, _mirrorConnector);\\n mirrorConnector = _mirrorConnector;\\n }\\n}\\n\",\"keccak256\":\"0x11b9785b7c3ce1296c4bea0b30f3ab28d9834121c63ab1b364cb54992f8fd90c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/ConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnectorManager} from \\\"../interfaces/IConnectorManager.sol\\\";\\nimport {IOutbox} from \\\"../interfaces/IOutbox.sol\\\";\\n\\n/**\\n * @notice This is an interface to allow the `Messaging` contract to be used\\n * as a `XappConnectionManager` on all router contracts.\\n *\\n * @dev Each nomad router contract has a `XappConnectionClient`, which references a\\n * XappConnectionManager to get the `Home` (outbox) and approved `Replica` (inbox)\\n * instances. At any point the client can replace the manager it's pointing to,\\n * changing the underlying messaging connection.\\n */\\nabstract contract ConnectorManager is IConnectorManager {\\n constructor() {}\\n\\n function home() public view returns (IOutbox) {\\n return IOutbox(address(this));\\n }\\n\\n function isReplica(address _potentialReplica) public view returns (bool) {\\n return _potentialReplica == address(this);\\n }\\n\\n function localDomain() external view virtual returns (uint32);\\n}\\n\",\"keccak256\":\"0x0112a527de062459aadfc2c8aa59a81c379d53c0f646f7869c6250e343ba91be\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/GasCap.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport {ProposedOwnable} from \\\"../../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract is used to enforce upper bounds on the amount of fees\\n * forwarded along. This caps the amount relayers could charge for the service\\n */\\nabstract contract GasCap is ProposedOwnable {\\n // ============ Storage ============\\n /**\\n * @notice The gnosis amb requires destination gas to be specified on the origin.\\n * The gas used will be passed in by the relayer to allow for real-time estimates,\\n * but will be capped at the admin-set cap.\\n */\\n uint256 public gasCap;\\n\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted when admin updates the gas cap\\n * @param _previous The starting value\\n * @param _updated The final value\\n */\\n event GasCapUpdated(uint256 _previous, uint256 _updated);\\n\\n // ============ Constructor ============\\n constructor(uint256 _gasCap) {\\n _setGasCap(_gasCap);\\n }\\n\\n // ============ Admin Fns ============\\n function setGasCap(uint256 _gasCap) public onlyOwner {\\n _setGasCap(_gasCap);\\n }\\n\\n // ============ Internal Fns ============\\n\\n /**\\n * @notice Used (by admin) to update the gas cap\\n * @param _gasCap The new value\\n */\\n function _setGasCap(uint256 _gasCap) internal {\\n emit GasCapUpdated(gasCap, _gasCap);\\n gasCap = _gasCap;\\n }\\n\\n /**\\n * @notice Used to get the gas to use. Will be the original value IFF it\\n * is less than the cap\\n * @param _gas The proposed gas value\\n */\\n function _getGas(uint256 _gas) internal view returns (uint256) {\\n if (_gas > gasCap) {\\n _gas = gasCap;\\n }\\n return _gas;\\n }\\n}\\n\",\"keccak256\":\"0x9a7c2dc4fd866a67cb6759cd18f04857e268649245c074edd4b8c1be37e69fff\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/SpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {ExcessivelySafeCall} from \\\"../../shared/libraries/ExcessivelySafeCall.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {MerkleLib} from \\\"../libraries/MerkleLib.sol\\\";\\nimport {Message} from \\\"../libraries/Message.sol\\\";\\nimport {RateLimited} from \\\"../libraries/RateLimited.sol\\\";\\nimport {SnapshotId} from \\\"../libraries/SnapshotId.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"../MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"../WatcherClient.sol\\\";\\n\\nimport {Connector, ProposedOwnable} from \\\"./Connector.sol\\\";\\nimport {ConnectorManager} from \\\"./ConnectorManager.sol\\\";\\n\\n/**\\n * @title SpokeConnector\\n * @author Connext Labs, Inc.\\n * @notice This contract implements the messaging functions needed on the spoke-side of a given AMB.\\n * The SpokeConnector extends the Connector functionality by being able to send, store, and prove\\n * messages.\\n *\\n * @dev If you are deploying this contract to mainnet, then the mirror values stored in the HubConnector\\n * will be unused\\n */\\nabstract contract SpokeConnector is Connector, ConnectorManager, WatcherClient, RateLimited, ReentrancyGuard {\\n // ============ Libraries ============\\n\\n using MerkleLib for MerkleLib.Tree;\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n using Message for bytes29;\\n\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted when a new sender is whitelisted for messaging\\n * @param sender Whitelisted address\\n */\\n event SenderAdded(address indexed sender);\\n\\n /**\\n * @notice Emitted when a new sender is de-whitelisted for messaging\\n * @param sender Removed address\\n */\\n event SenderRemoved(address indexed sender);\\n\\n /**\\n * @notice Emitted when a new proposer is added\\n * @param proposer The address of the proposer\\n */\\n event ProposerAdded(address indexed proposer);\\n\\n /**\\n * @notice Emitted when a proposer is removed\\n * @param proposer The address of the proposer\\n */\\n event ProposerRemoved(address indexed proposer);\\n\\n /**\\n * @notice Emitted when a new aggregate root is delivered from the hub\\n * @param root Delivered root\\n */\\n event AggregateRootReceived(bytes32 indexed root);\\n\\n /**\\n * @notice Emitted when a proposed aggregate root is removed by admin\\n * @param root Removed root\\n */\\n event AggregateRootRemoved(bytes32 indexed root);\\n\\n /**\\n * @notice Emitted when an aggregate root has made it through the fraud period\\n * without being disputed\\n * @param root Newly verified root\\n */\\n event AggregateRootVerified(bytes32 indexed root);\\n\\n /**\\n * @notice Emitted when a message is sent (leaf added to outbound root)\\n * @param leaf The hash added to tree\\n * @param index The index of the leaf\\n * @param root The updated outbound root after insertion\\n * @param message The raw message body\\n */\\n event Dispatch(bytes32 indexed leaf, uint256 indexed index, bytes32 indexed root, bytes message);\\n\\n /**\\n * @notice Emitted when a message is handled (this is the destination domain)\\n * @param leaf The leaf processed\\n * @param success Whether `handle` call on recipient is successful\\n * @param returnData The data returned from the `handle` call on recipient\\n */\\n event Process(bytes32 indexed leaf, bool success, bytes returnData);\\n\\n /**\\n * @notice Emitted when the admin updates the delay blocks\\n * @param updated The new delay blocks\\n * @param caller The msg.sender of transaction\\n */\\n event DelayBlocksUpdated(uint256 indexed updated, address caller);\\n\\n event SnapshotRootSaved(uint256 indexed snapshotId, bytes32 indexed root, uint256 indexed count);\\n\\n /**\\n * @notice Emitted when a message (outbound root from different spoke) is proven\\n * against the aggregate root\\n * @param leaf The proven leaf\\n * @param aggregateRoot The root the leaf was proven against\\n * @param aggregateIndex Position of leaf in the aggregate root\\n */\\n event MessageProven(bytes32 indexed leaf, bytes32 indexed aggregateRoot, uint256 aggregateIndex);\\n\\n /**\\n * @notice Emitted when slow mode is activated\\n * @param watcher The address of the watcher who called the function\\n */\\n event SlowModeActivated(address indexed watcher);\\n\\n /**\\n * @notice Emitted when optimistic mode is activated\\n */\\n event OptimisticModeActivated();\\n\\n /**\\n * @notice Emitted when a new aggregate root is proposed\\n * @param aggregateRoot The new aggregate root proposed\\n * @param endOfDispute The block at which this root can't be disputed anymore and therefore it's deemed valid.\\n * @param rootTimestamp The timestamp at which the root was finalized in the root manager contract.\\n * @param domain The domain where this root was proposed.\\n */\\n event AggregateRootProposed(\\n bytes32 indexed aggregateRoot,\\n uint256 indexed rootTimestamp,\\n uint256 indexed endOfDispute,\\n uint32 domain\\n );\\n\\n /**\\n * @notice Emitted when a pending aggregate root is deleted from the pendingAggregateRoots mapping\\n * @param aggregateRoot The deleted aggregate root\\n */\\n event PendingAggregateRootDeleted(bytes32 indexed aggregateRoot);\\n\\n /**\\n * @notice Emitted when the current proposed root is finalized\\n * @param aggregateRoot The aggregate root finalized\\n */\\n event ProposedRootFinalized(bytes32 aggregateRoot);\\n\\n /**\\n * @notice Emitted when the number of dispute blocks is updated\\n * @param previous The previous number of blocks off-chain agents had to dispute a proposed root\\n * @param updated The new number of blocks off-chain agents have to dispute a proposed root\\n */\\n event DisputeBlocksUpdated(uint256 previous, uint256 updated);\\n\\n /**\\n * @notice Emitted whem the number of minimum dispute blocks is updated\\n * @param previous The previous minimum number of dispute blocks to set\\n * @param updated The new minimum number of dispute blocks to set\\n */\\n event MinDisputeBlocksUpdated(uint256 previous, uint256 updated);\\n\\n // ============ Errors ============\\n\\n error SpokeConnector_onlyOptimisticMode__SlowModeOn();\\n error SpokeConnector_activateOptimisticMode__OptimisticModeOn();\\n error SpokeConnector_onlyProposer__NotAllowlistedProposer();\\n error SpokeConnector_proposeAggregateRoot__ProposeInProgress();\\n error SpokeConnector_finalize__ProposeInProgress();\\n error SpokeConnector_finalize__InvalidInputHash();\\n error SpokeConnector_finalize__ProposedHashIsFinalizedHash();\\n error SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore();\\n error SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin();\\n error SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore();\\n error SpokeConnector_receiveAggregateRoot__OptimisticModeOn();\\n error SpokeConnector_constructor__DisputeBlocksLowerThanMin();\\n\\n // ============ Structs ============\\n\\n /**\\n * Struct for submitting a proof for a given message. Used in `proveAndProcess` below.\\n * @param message Bytes of message to be processed. The hash of this message is considered the leaf.\\n * @param path Path in tree for given leaf.\\n * @param index Index of leaf in home's merkle tree.\\n */\\n struct Proof {\\n bytes message;\\n bytes32[32] path;\\n uint256 index;\\n }\\n\\n /**\\n * Struct containing the base construstor arguments of a SpokeConnector\\n * @param domain The domain this connector lives on.\\n * @param mirrorDomain The hub domain.\\n * @param amb The address of the AMB on the spoke domain this connector lives on.\\n * @param rootManager The address of the RootManager on the hub.\\n * @param mirrorConnector The address of the spoke connector.\\n * @param processGas The gas costs used in `handle` to ensure meaningful state changes can occur (minimum gas needed\\n * to handle transaction).\\n * @param reserveGas The gas costs reserved when `handle` is called to ensure failures are handled.\\n * @param delayBlocks The delay for the validation period for incoming messages in blocks.\\n * @param merkle The address of the MerkleTreeManager on this spoke domain.\\n * @param watcherManager The address of the WatcherManager to whom this connector is a client.\\n * @param minDisputeBlocks The minimum number of dispute blocks that can be set.\\n * @param disputeBlocks The number of dispute blocks off-chain agents will have to dispute proposed roots.\\n */\\n struct ConstructorParams {\\n uint32 domain;\\n uint32 mirrorDomain;\\n address amb;\\n address rootManager;\\n address mirrorConnector;\\n uint256 processGas;\\n uint256 reserveGas;\\n uint256 delayBlocks;\\n address merkle;\\n address watcherManager;\\n uint256 minDisputeBlocks;\\n uint256 disputeBlocks;\\n }\\n\\n // ============ Public Storage ============\\n\\n /**\\n * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n * the validity and pause if necessary.\\n */\\n uint256 public delayBlocks;\\n\\n /**\\n * @notice MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root\\n * will be sent crosschain to the hub for aggregation and redistribution.\\n */\\n MerkleTreeManager public immutable MERKLE;\\n\\n /**\\n * @notice Minimum gas for processing a received message (reserved for handle)\\n */\\n uint256 public immutable PROCESS_GAS;\\n\\n /**\\n * @notice Reserved gas (to ensure tx completes in case message processing runs out)\\n */\\n uint256 public immutable RESERVE_GAS;\\n\\n /**\\n * @notice This will hold the commit block for incoming aggregateRoots from the hub chain. Once\\n * they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can\\n * be used for proving inclusion of crosschain messages.\\n *\\n * @dev NOTE: A commit block of 0 should be considered invalid (it is an empty entry in the\\n * mapping). We must ALWAYS ensure the value is not 0 before checking whether it has surpassed the\\n * verification period.\\n */\\n mapping(bytes32 => uint256) public pendingAggregateRoots;\\n\\n /**\\n * @notice This tracks the roots of the aggregate tree containing outbound roots from all other\\n * supported domains. The current version is the one that is known to be past the delayBlocks\\n * time period.\\n * @dev This root is the root of the tree that is aggregated on mainnet (composed of all the roots\\n * of previous trees).\\n */\\n mapping(bytes32 => bool) public provenAggregateRoots;\\n\\n /**\\n * @notice This tracks whether the root has been proven to exist within the given aggregate root.\\n * @dev Tracking this is an optimization so you dont have to prove inclusion of the same constituent\\n * root many times.\\n */\\n mapping(bytes32 => bool) public provenMessageRoots;\\n\\n /**\\n * @notice This mapping records all message roots that have already been sent in order to prevent\\n * redundant message roots from being sent to hub.\\n */\\n mapping(bytes32 => bool) public sentMessageRoots;\\n\\n /**\\n * @notice Records all whitelisted senders\\n * @dev This is used for the `onlyAllowlistedSender` modifier, which gates who\\n * can send messages using `dispatch`.\\n */\\n mapping(address => bool) public allowlistedSenders;\\n\\n /**\\n * @notice Mapping of the snapshot roots for a specific index. Used for data availability for off-chain scripts\\n */\\n mapping(uint256 => bytes32) public snapshotRoots;\\n\\n /**\\n * @notice The resulting hash of keccaking the proposed aggregate root, the timestamp at which it was finalized in the root manager\\n * and the block at which the time to dispute it ends.\\n * @dev Set to 0x1 to prevent someone from calling finalize() the moment the contract is deployed.\\n */\\n bytes32 public proposedAggregateRootHash = 0x0000000000000000000000000000000000000000000000000000000000000001;\\n\\n /*\\n @notice The number of blocks off-chain agents have to dispute a given proposal.\\n */\\n uint256 public disputeBlocks;\\n\\n /**\\n * @notice The minimum number of blocks disputeBlocks can be set to.\\n */\\n uint256 public minDisputeBlocks;\\n\\n /**\\n * @notice Hash used to keep the proposal slot warm once a given proposal has been finalized.\\n * @dev It also represents the empty state. This means if a proposal holds this hash, it's deemed empty.\\n */\\n bytes32 public constant FINALIZED_HASH = 0x0000000000000000000000000000000000000000000000000000000000000001;\\n\\n /**\\n * @notice True if the system is working in optimistic mode. Otherwise is working in slow mode\\n */\\n bool public optimisticMode;\\n\\n /**\\n * @notice This is used for the `onlyProposers` modifier, which gates who\\n * can propose new roots using `proposeAggregateRoot`.\\n */\\n mapping(address => bool) public allowlistedProposers;\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Ensures the msg.sender is allowlisted\\n */\\n modifier onlyAllowlistedSender() {\\n require(allowlistedSenders[msg.sender], \\\"!allowlisted\\\");\\n _;\\n }\\n\\n /**\\n * @notice Ensures the msg.sender is an allowlisted proposer\\n */\\n modifier onlyAllowlistedProposer() {\\n if (!allowlistedProposers[msg.sender]) revert SpokeConnector_onlyProposer__NotAllowlistedProposer();\\n _;\\n }\\n\\n /**\\n * @notice Checks if this spoke connector is working in optimistic mode\\n */\\n modifier onlyOptimisticMode() {\\n if (!optimisticMode) revert SpokeConnector_onlyOptimisticMode__SlowModeOn();\\n _;\\n }\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Creates a new SpokeConnector instance.\\n * @param _params The constructor parameters.\\n */\\n constructor(\\n ConstructorParams memory _params\\n )\\n ConnectorManager()\\n Connector(_params.domain, _params.mirrorDomain, _params.amb, _params.rootManager, _params.mirrorConnector)\\n WatcherClient(_params.watcherManager)\\n {\\n uint256 _disputeBlocks = _params.disputeBlocks;\\n uint256 _minDisputeBlocks = _params.minDisputeBlocks;\\n if (_disputeBlocks < _minDisputeBlocks) revert SpokeConnector_constructor__DisputeBlocksLowerThanMin();\\n // Sanity check: constants are reasonable.\\n require(_params.processGas > 850_000 - 1, \\\"!process gas\\\");\\n require(_params.reserveGas > 15_000 - 1, \\\"!reserve gas\\\");\\n PROCESS_GAS = _params.processGas;\\n RESERVE_GAS = _params.reserveGas;\\n\\n require(_params.merkle != address(0), \\\"!zero merkle\\\");\\n MERKLE = MerkleTreeManager(_params.merkle);\\n\\n delayBlocks = _params.delayBlocks;\\n minDisputeBlocks = _minDisputeBlocks;\\n disputeBlocks = _disputeBlocks;\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Adds a sender to the allowlist.\\n * @dev Only allowlisted routers (senders) can call `dispatch`.\\n * @param _sender Sender to whitelist\\n */\\n function addSender(address _sender) external onlyOwner {\\n require(!allowlistedSenders[_sender], \\\"allowed\\\");\\n allowlistedSenders[_sender] = true;\\n emit SenderAdded(_sender);\\n }\\n\\n /**\\n * @notice Removes a sender from the allowlist.\\n * @dev Only allowlisted routers (senders) can call `dispatch`.\\n * @param _sender Sender to remove from whitelist\\n */\\n function removeSender(address _sender) external onlyOwner {\\n require(allowlistedSenders[_sender], \\\"!allowed\\\");\\n delete allowlistedSenders[_sender];\\n emit SenderRemoved(_sender);\\n }\\n\\n /**\\n * @notice Adds a proposer to the allowlist.\\n * @dev Only allowlisted proposers can call `proposeAggregateRoot`.\\n */\\n function addProposer(address _proposer) external onlyOwner {\\n allowlistedProposers[_proposer] = true;\\n emit ProposerAdded(_proposer);\\n }\\n\\n /**\\n * @notice Removes a proposer from the allowlist.\\n * @dev Only allowlisted proposers can call `proposeAggregateRoot`.\\n */\\n function removeProposer(address _proposer) external onlyOwner {\\n delete allowlistedProposers[_proposer];\\n emit ProposerRemoved(_proposer);\\n }\\n\\n /**\\n * @notice Set the `minDisputeBlocks` variable to the provided parameter.\\n */\\n function setMinDisputeBlocks(uint256 _minDisputeBlocks) external onlyOwner {\\n if (_minDisputeBlocks == minDisputeBlocks)\\n revert SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore();\\n emit MinDisputeBlocksUpdated(minDisputeBlocks, _minDisputeBlocks);\\n minDisputeBlocks = _minDisputeBlocks;\\n }\\n\\n /**\\n * @notice Set the `disputeBlocks`, the duration, in blocks, of the dispute process for\\n * a given proposed root\\n */\\n function setDisputeBlocks(uint256 _disputeBlocks) external onlyOwner {\\n if (_disputeBlocks < minDisputeBlocks) revert SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin();\\n if (_disputeBlocks == disputeBlocks) revert SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore();\\n emit DisputeBlocksUpdated(disputeBlocks, _disputeBlocks);\\n disputeBlocks = _disputeBlocks;\\n }\\n\\n /**\\n * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n * is verified.\\n * @param _delayBlocks Updated delay block value\\n */\\n function setDelayBlocks(uint256 _delayBlocks) external onlyOwner {\\n require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n emit DelayBlocksUpdated(_delayBlocks, msg.sender);\\n delayBlocks = _delayBlocks;\\n }\\n\\n /**\\n * @notice Set the rate limit (number of blocks) at which we can send messages from\\n * this contract to the hub chain using the `send` method.\\n * @dev Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)\\n * @param _rateLimit The number of blocks require between sending messages. If set to\\n * 0, rate limiting for this spoke connector will be disabled.\\n */\\n function setRateLimitBlocks(uint256 _rateLimit) external onlyOwner {\\n _setRateLimitBlocks(_rateLimit);\\n }\\n\\n /**\\n * @notice Manually remove a pending aggregateRoot by owner if the contract is paused.\\n * @dev This method is required for handling fraud cases in the current construction. Specifically,\\n * this will protect against a fraudulent aggregate root getting transported, not fraudulent\\n * roots that constitute a given aggregate root (i.e. can protect against fraudulent\\n * hub -> spoke transport, not spoke -> hub transport).\\n * @param _fraudulentRoot Target fraudulent root that should be erased from the\\n * `pendingAggregateRoots` mapping.\\n */\\n function removePendingAggregateRoot(bytes32 _fraudulentRoot) external onlyOwner whenPaused {\\n // Sanity check: pending aggregate root exists.\\n require(pendingAggregateRoots[_fraudulentRoot] != 0, \\\"aggregateRoot !exists\\\");\\n delete pendingAggregateRoots[_fraudulentRoot];\\n emit AggregateRootRemoved(_fraudulentRoot);\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as it is impossible in the\\n * WatcherClient, and as long as only the owner can remove pending roots in case of\\n * fraud.\\n */\\n function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {\\n require(false, \\\"prohibited\\\");\\n }\\n\\n /**\\n * @notice Watcher can set the system in slow mode.\\n * @dev Sets the proposed aggregate root hash to FINALIZED_HASH, invalidating it.\\n */\\n function activateSlowMode() external onlyWatcher onlyOptimisticMode {\\n optimisticMode = false;\\n proposedAggregateRootHash = FINALIZED_HASH;\\n emit SlowModeActivated(msg.sender);\\n }\\n\\n /**\\n * @notice Owner can set the system to optimistic mode.\\n */\\n function activateOptimisticMode() external onlyOwner {\\n if (optimisticMode) revert SpokeConnector_activateOptimisticMode__OptimisticModeOn();\\n optimisticMode = true;\\n emit OptimisticModeActivated();\\n }\\n\\n // ============ Public Functions ============\\n\\n /**\\n * @notice This returns the root of all messages with the origin domain as this domain (i.e.\\n * all outbound messages)\\n */\\n function outboundRoot() external view returns (bytes32) {\\n return MERKLE.root();\\n }\\n\\n /**\\n * @notice This provides the implementation for what is defined in the ConnectorManager\\n * to avoid storing the domain redundantly\\n */\\n function localDomain() external view override returns (uint32) {\\n return DOMAIN;\\n }\\n\\n /**\\n * @notice This dispatches outbound root to hub via AMB\\n * @param _encodedData Data needed to send crosschain message by associated amb\\n */\\n function send(bytes memory _encodedData) external payable virtual whenNotPaused rateLimited {\\n bytes32 root = MERKLE.root();\\n require(sentMessageRoots[root] == false, \\\"root already sent\\\");\\n // mark as sent\\n sentMessageRoots[root] = true;\\n\\n // call internal function\\n _sendRoot(root, _encodedData);\\n }\\n\\n /**\\n * @notice This function adds transfers to the outbound transfer merkle tree.\\n * @dev The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \\\"hub\\\"),\\n * it will be combined into a single aggregate root by RootManager (along with outbound roots from other\\n * chains). This aggregate root will be redistributed to all destination chains.\\n * @dev This function is also in charge of saving the snapshot root when needed. If the message being added to the\\n * tree is the first of the current period this means the last snapshot finished and its root must be saved. The saving\\n * happens before adding the new message to the tree.\\n *\\n * NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions\\n * @param _destinationDomain Domain message is intended for\\n * @param _recipientAddress Address for message recipient\\n * @param _messageBody Message contents\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external onlyAllowlistedSender returns (bytes32, bytes memory) {\\n // Before inserting the new message to the tree we need to check if the last snapshot root must be calculated and set.\\n uint256 _lastCompletedSnapshotId = SnapshotId.getLastCompletedSnapshotId();\\n if (snapshotRoots[_lastCompletedSnapshotId] == 0) {\\n // Saves current tree root as last snapshot root before adding the new message.\\n bytes32 _currentRoot = MERKLE.root();\\n snapshotRoots[_lastCompletedSnapshotId] = _currentRoot;\\n emit SnapshotRootSaved(_lastCompletedSnapshotId, _currentRoot, MERKLE.count());\\n }\\n\\n // Get the next nonce for the destination domain, then increment it.\\n uint32 _nonce = MERKLE.incrementNonce(_destinationDomain);\\n\\n // Format the message into packed bytes.\\n bytes memory _message = Message.formatMessage(\\n DOMAIN,\\n TypeCasts.addressToBytes32(msg.sender),\\n _nonce,\\n _destinationDomain,\\n _recipientAddress,\\n _messageBody\\n );\\n\\n // Insert the hashed message into the Merkle tree.\\n bytes32 _messageHash = keccak256(_message);\\n\\n // Returns the root calculated after insertion of message, needed for events for\\n // watchers\\n (bytes32 _root, uint256 _count) = MERKLE.insert(_messageHash);\\n\\n // Emit Dispatch event with message information.\\n // NOTE: Current leaf index is count - 1 since new leaf has already been inserted.\\n emit Dispatch(_messageHash, _count - 1, _root, _message);\\n return (_messageHash, _message);\\n }\\n\\n /**\\n * @notice Propose a new aggregate root\\n * @dev _rootTimestamp is required for off-chain agents to be able to know which root they should fetch from the root manager contract\\n * in order to compare it with the one being proposed. The off-chain agents should also ensure the proposed root is\\n * not an old one.\\n * @param _aggregateRoot The aggregate root to propose.\\n * @param _rootTimestamp Block.timestamp at which the root was finalized in the root manager contract.\\n */\\n function proposeAggregateRoot(\\n bytes32 _aggregateRoot,\\n uint256 _rootTimestamp\\n ) external virtual whenNotPaused onlyAllowlistedProposer onlyOptimisticMode {\\n if (proposedAggregateRootHash != FINALIZED_HASH) revert SpokeConnector_proposeAggregateRoot__ProposeInProgress();\\n if (pendingAggregateRoots[_aggregateRoot] != 0) {\\n delete pendingAggregateRoots[_aggregateRoot];\\n emit PendingAggregateRootDeleted(_aggregateRoot);\\n }\\n\\n uint256 _endOfDispute = block.number + disputeBlocks;\\n proposedAggregateRootHash = keccak256(abi.encode(_aggregateRoot, _rootTimestamp, _endOfDispute));\\n\\n emit AggregateRootProposed(_aggregateRoot, _rootTimestamp, _endOfDispute, DOMAIN);\\n }\\n\\n /**\\n * @notice Finalizes the proposed aggregate root. This confirms the root validity. Therefore, it can be proved and processed.\\n * @dev Finalized roots won't be monitored by off-chain agents as they are deemed valid.\\n *\\n * @param _proposedAggregateRoot The aggregate root currently proposed\\n * @param _endOfDispute The block in which the dispute period for proposedAggregateRootHash concludes\\n */\\n function finalize(\\n bytes32 _proposedAggregateRoot,\\n uint256 _rootTimestamp,\\n uint256 _endOfDispute\\n ) external virtual whenNotPaused onlyOptimisticMode {\\n if (_endOfDispute > block.number) revert SpokeConnector_finalize__ProposeInProgress();\\n\\n bytes32 _proposedAggregateRootHash = proposedAggregateRootHash;\\n if (_proposedAggregateRootHash == FINALIZED_HASH) revert SpokeConnector_finalize__ProposedHashIsFinalizedHash();\\n\\n bytes32 _userInputHash = keccak256(abi.encode(_proposedAggregateRoot, _rootTimestamp, _endOfDispute));\\n if (_userInputHash != _proposedAggregateRootHash) revert SpokeConnector_finalize__InvalidInputHash();\\n\\n provenAggregateRoots[_proposedAggregateRoot] = true;\\n proposedAggregateRootHash = FINALIZED_HASH;\\n\\n emit ProposedRootFinalized(_proposedAggregateRoot);\\n }\\n\\n /**\\n * @notice Must be able to call the `handle` function on the BridgeRouter contract. This is called\\n * on the destination domain to handle incoming messages.\\n *\\n * Proving:\\n * Calculates the expected inbound root from an origin chain given a leaf (message hash),\\n * the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this\\n * calculated inbound root is included in the current aggregateRoot, given its index in the aggregator\\n * tree and the proof of inclusion.\\n *\\n * Processing:\\n * After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for\\n * execution.\\n *\\n * @dev Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they\\n * must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.\\n * @dev Intended to be called by the relayer at specific intervals during runtime.\\n * @dev Will record a calculated root as having been proven if we've already proven that it was included\\n * in the aggregateRoot.\\n *\\n * @param _proofs Batch of Proofs containing messages for proving/processing.\\n * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n * already been delivered to this spoke connector contract and surpassed the validation period.\\n * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n */\\n function proveAndProcess(\\n Proof[] calldata _proofs,\\n bytes32 _aggregateRoot,\\n bytes32[32] calldata _aggregatePath,\\n uint256 _aggregateIndex\\n ) external whenNotPaused nonReentrant {\\n // Sanity check: proofs are included.\\n require(_proofs.length > 0, \\\"!proofs\\\");\\n\\n // Optimization: calculate the inbound root for the first message in the batch and validate that\\n // it's included in the aggregator tree. We can use this as a reference for every calculation\\n // below to minimize storage access calls.\\n bytes32 _messageHash = keccak256(_proofs[0].message);\\n // TODO: Could use an array of sharedRoots so you can submit a message batch of messages with\\n // different origins.\\n bytes32 _messageRoot = calculateMessageRoot(_messageHash, _proofs[0].path, _proofs[0].index);\\n\\n // Handle proving this message root is included in the target aggregate root.\\n proveMessageRoot(_messageRoot, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n // Assuming the inbound message root was proven, the first message is now considered proven.\\n MERKLE.markAsProven(_messageHash);\\n\\n // Now we handle proving all remaining messages in the batch - they should all share the same\\n // inbound root!\\n uint256 len = _proofs.length;\\n for (uint32 i = 1; i < len; ) {\\n _messageHash = keccak256(_proofs[i].message);\\n bytes32 _calculatedRoot = calculateMessageRoot(_messageHash, _proofs[i].path, _proofs[i].index);\\n // Make sure this root matches the validated inbound root.\\n require(_calculatedRoot == _messageRoot, \\\"!sharedRoot\\\");\\n // Message is proven!\\n MERKLE.markAsProven(_messageHash);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // All messages have been proven. We iterate separately here to process each message in the batch.\\n // NOTE: Going through the proving phase for all messages in the batch BEFORE processing ensures\\n // we hit reverts before we consume unbounded gas from `process` calls.\\n for (uint32 i = 0; i < len; ) {\\n process(_proofs[i].message);\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice This function gets the last completed snapshot id\\n * @dev The value is calculated through an internal function to reuse code and save gas\\n * @return _lastCompletedSnapshotId The last completed snapshot id\\n */\\n function getLastCompletedSnapshotId() external view returns (uint256 _lastCompletedSnapshotId) {\\n _lastCompletedSnapshotId = SnapshotId.getLastCompletedSnapshotId();\\n }\\n\\n /**\\n * @notice Get the duration of the snapshot\\n *\\n * @return _snapshotDuration The duration of the snapshot\\n */\\n function getSnapshotDuration() external pure returns (uint256 _snapshotDuration) {\\n _snapshotDuration = SnapshotId.SNAPSHOT_DURATION;\\n }\\n\\n // ============ Private Functions ============\\n\\n function _sendRoot(bytes32 _root, bytes memory _encodedData) internal {\\n // call internal function\\n bytes memory _data = abi.encodePacked(_root);\\n _sendMessage(_data, _encodedData);\\n emit MessageSent(_data, _encodedData, msg.sender);\\n }\\n\\n /**\\n * @notice Called to accept aggregate root dispatched from the RootManager on the hub.\\n * @dev Must check the msg.sender on the origin chain to ensure only the root manager is passing\\n * these roots.\\n * @param _newRoot Received aggregate\\n */\\n function receiveAggregateRoot(bytes32 _newRoot) internal {\\n if (optimisticMode) revert SpokeConnector_receiveAggregateRoot__OptimisticModeOn();\\n require(_newRoot != bytes32(\\\"\\\"), \\\"new root empty\\\");\\n require(pendingAggregateRoots[_newRoot] == 0, \\\"root already pending\\\");\\n require(!provenAggregateRoots[_newRoot], \\\"root already proven\\\");\\n\\n pendingAggregateRoots[_newRoot] = block.number;\\n emit AggregateRootReceived(_newRoot);\\n }\\n\\n /**\\n * @notice Checks whether the given aggregate root has surpassed the verification period.\\n * @dev Reverts if the given aggregate root is invalid (does not exist) OR has not surpassed\\n * verification period.\\n * @dev If the target aggregate root is pending and HAS surpassed the verification period, then we will\\n * move it over to the proven mapping.\\n * @param _aggregateRoot Target aggregate root to verify.\\n */\\n function verifyAggregateRoot(bytes32 _aggregateRoot) internal {\\n // 0. Sanity check: root is not 0.\\n require(_aggregateRoot != bytes32(\\\"\\\"), \\\"aggregateRoot empty\\\");\\n\\n // 1. Check to see if the target *aggregate* root has already been proven.\\n if (provenAggregateRoots[_aggregateRoot]) {\\n return; // Short circuit if this root is proven.\\n }\\n\\n // 2. The target aggregate root must be pending. Aggregate root commit block entry MUST exist.\\n uint256 _aggregateRootCommitBlock = pendingAggregateRoots[_aggregateRoot];\\n require(_aggregateRootCommitBlock != 0, \\\"aggregateRoot !exist\\\");\\n\\n // 3. Pending aggregate root has surpassed the `delayBlocks` verification period.\\n require(block.number - _aggregateRootCommitBlock >= delayBlocks, \\\"aggregateRoot !verified\\\");\\n\\n // 4. The target aggregate root has surpassed verification period, we can move it over to the\\n // proven mapping.\\n provenAggregateRoots[_aggregateRoot] = true;\\n emit AggregateRootVerified(_aggregateRoot);\\n // May as well delete the pending aggregate root entry for the gas refund: it should no longer\\n // be needed.\\n delete pendingAggregateRoots[_aggregateRoot];\\n }\\n\\n /**\\n * @notice Checks whether a given message is valid. If so, calculates the expected inbound root from an\\n * origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion.\\n * @dev Reverts if message's LeafStatus != None (i.e. if message was already proven or processed).\\n *\\n * @param _messageHash Leaf (message hash) that requires proving.\\n * @param _messagePath Merkle path of inclusion for the leaf.\\n * @param _messageIndex Index of leaf in the merkle tree on the origin chain of the message.\\n * @return bytes32 Calculated root.\\n **/\\n function calculateMessageRoot(\\n bytes32 _messageHash,\\n bytes32[32] calldata _messagePath,\\n uint256 _messageIndex\\n ) internal view returns (bytes32) {\\n // Ensure that the given message has not already been proven and processed.\\n require(MERKLE.leaves(_messageHash) == MerkleTreeManager.LeafStatus.None, \\\"!LeafStatus.None\\\");\\n // Calculate the expected inbound root from the message origin based on the proof.\\n // NOTE: Assuming a valid message was submitted with correct path/index, this should be an inbound root\\n // that the hub has received. If the message were invalid, the root calculated here would not exist in the\\n // aggregate root.\\n return MerkleLib.branchRoot(_messageHash, _messagePath, _messageIndex);\\n }\\n\\n /**\\n * @notice Prove an inbound message root from another chain is included in the target aggregateRoot.\\n * @param _messageRoot The message root we want to verify.\\n * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n * already been delivered to this spoke connector contract and surpassed the validation period.\\n * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n */\\n function proveMessageRoot(\\n bytes32 _messageRoot,\\n bytes32 _aggregateRoot,\\n bytes32[32] calldata _aggregatePath,\\n uint256 _aggregateIndex\\n ) internal {\\n // 0. Check to see if the root for this batch has already been proven.\\n if (provenMessageRoots[_messageRoot]) {\\n // NOTE: It seems counter-intuitive, but we do NOT need to prove the given `_aggregateRoot` param\\n // is valid IFF the `_messageRoot` has already been proven; we know that the `_messageRoot` has to\\n // have been included in *some* proven aggregate root historically.\\n return;\\n }\\n\\n // 1. Ensure aggregate root has been proven.\\n verifyAggregateRoot(_aggregateRoot);\\n\\n // 2. Calculate an aggregate root, given this inbound root (as leaf), path (proof), and index.\\n bytes32 _calculatedAggregateRoot = MerkleLib.branchRoot(_messageRoot, _aggregatePath, _aggregateIndex);\\n\\n // 3. Check to make sure it matches the current aggregate root we have stored.\\n require(_calculatedAggregateRoot == _aggregateRoot, \\\"invalid inboundRoot\\\");\\n\\n // This inbound root has been proven. We should specify that to optimize future calls.\\n provenMessageRoots[_messageRoot] = true;\\n emit MessageProven(_messageRoot, _aggregateRoot, _aggregateIndex);\\n }\\n\\n /**\\n * @notice Given formatted message, attempts to dispatch message payload to end recipient.\\n * @dev Recipient must implement a `handle` method (refer to IMessageRecipient.sol)\\n * Reverts if formatted message's destination domain is not the Replica's domain,\\n * if message has not been proven,\\n * or if not enough gas is provided for the dispatch transaction.\\n * @param _message Formatted message\\n * @return _success TRUE iff dispatch transaction succeeded\\n */\\n function process(bytes memory _message) internal returns (bool _success) {\\n bytes29 _m = _message.ref(0);\\n // ensure message was meant for this domain\\n require(_m.destination() == DOMAIN, \\\"!destination\\\");\\n // ensure message has been proven\\n bytes32 _messageHash = _m.keccak();\\n // check re-entrancy guard\\n // require(entered == 1, \\\"!reentrant\\\");\\n // entered = 0;\\n // update message status as processed\\n MERKLE.markAsProcessed(_messageHash);\\n // A call running out of gas TYPICALLY errors the whole tx. We want to\\n // a) ensure the call has a sufficient amount of gas to make a\\n // meaningful state change.\\n // b) ensure that if the subcall runs out of gas, that the tx as a whole\\n // does not revert (i.e. we still mark the message processed)\\n // To do this, we require that we have enough gas to process\\n // and still return. We then delegate only the minimum processing gas.\\n require(gasleft() > PROCESS_GAS + RESERVE_GAS - 1, \\\"!gas\\\");\\n // get the message recipient\\n address _recipient = _m.recipientAddress();\\n // set up for assembly call\\n uint256 _gas = PROCESS_GAS;\\n uint16 _maxCopy = 256;\\n // allocate memory for returndata\\n bytes memory _returnData = new bytes(_maxCopy);\\n bytes memory _calldata = abi.encodeWithSignature(\\n \\\"handle(uint32,uint32,bytes32,bytes)\\\",\\n _m.origin(),\\n _m.nonce(),\\n _m.sender(),\\n _m.body().clone()\\n );\\n\\n (_success, _returnData) = ExcessivelySafeCall.excessivelySafeCall(_recipient, _gas, 0, _maxCopy, _calldata);\\n\\n // emit process results\\n emit Process(_messageHash, _success, _returnData);\\n }\\n}\\n\",\"keccak256\":\"0x74733a5b934d66cc5c1994bcae244a64aba33fd9d8dc30bbfb2a5b4712ef927d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/BaseOptimism.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {OptimismAmb} from \\\"../../interfaces/ambs/optimism/OptimismAmb.sol\\\";\\n\\nimport {GasCap} from \\\"../GasCap.sol\\\";\\n\\nabstract contract BaseOptimism is GasCap {\\n // ============ Constructor ============\\n constructor(uint256 _gasCap) GasCap(_gasCap) {}\\n\\n // ============ Override Fns ============\\n function _verifySender(address _amb, address _expected) internal view returns (bool) {\\n require(msg.sender == _amb, \\\"!bridge\\\");\\n return OptimismAmb(_amb).xDomainMessageSender() == _expected;\\n }\\n\\n /**\\n * @notice Using Optimism AMB, the gas is provided to `sendMessage` as an encoded uint\\n */\\n function _getGasFromEncoded(bytes memory _encodedData) internal view returns (uint256 _gas) {\\n // Should include gas info in specialized calldata\\n require(_encodedData.length == 32, \\\"!data length\\\");\\n\\n // Get the gas, if it is more than the cap use the cap\\n _gas = _getGas(abi.decode(_encodedData, (uint256)));\\n }\\n}\\n\",\"keccak256\":\"0x87034df88ba7e4d767c451ff2d0180f8eee25f502682153af7a018e280eab8e3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {OptimismAmb} from \\\"../../interfaces/ambs/optimism/OptimismAmb.sol\\\";\\n\\nimport {SpokeConnector, ProposedOwnable} from \\\"../SpokeConnector.sol\\\";\\nimport {Connector} from \\\"../Connector.sol\\\";\\n\\nimport {BaseOptimism} from \\\"./BaseOptimism.sol\\\";\\n\\ncontract OptimismSpokeConnector is SpokeConnector, BaseOptimism {\\n // ============ Constructor ============\\n constructor(\\n ConstructorParams memory _baseSpokeParams,\\n uint256 _gasCap // gasLimit of message call on L1\\n ) SpokeConnector(_baseSpokeParams) BaseOptimism(_gasCap) {}\\n\\n // ============ Override Fns ============\\n function _verifySender(address _expected) internal view override returns (bool) {\\n return _verifySender(AMB, _expected);\\n }\\n\\n /**\\n * @notice Should not be able to renounce ownership\\n */\\n function renounceOwnership() public virtual override(SpokeConnector, ProposedOwnable) onlyOwner {\\n require(false, \\\"prohibited\\\");\\n }\\n\\n /**\\n * @dev Sends `outboundRoot` to root manager on l1\\n */\\n function _sendMessage(bytes memory _data, bytes memory _encodedData) internal override {\\n // Should always be sending the outbound root\\n require(_data.length == 32, \\\"!data length\\\");\\n OptimismAmb(AMB).sendMessage(mirrorConnector, _data, uint32(_getGasFromEncoded(_encodedData)));\\n }\\n\\n /**\\n * @dev Handles an incoming `aggregateRoot`\\n * NOTE: Could store latest root sent and prove aggregate root\\n */\\n function _processMessage(bytes memory _data) internal override {\\n // enforce this came from connector on l2\\n require(_verifySender(mirrorConnector), \\\"!mirrorConnector\\\");\\n // get the data (should be the aggregate root)\\n require(_data.length == 32, \\\"!length\\\");\\n // set the aggregate root\\n receiveAggregateRoot(bytes32(_data));\\n }\\n}\\n\",\"keccak256\":\"0x6a31ad30ac1e3273e67c40261e78c6261cc79be430fbf41e704bf00e3f897d13\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n * to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n * mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n * root from all of the AMBs\\n * - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n * tree root\\n * - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n * process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n // ============ Events ============\\n /**\\n * @notice Emitted whenever a message is successfully sent over an AMB\\n * @param data The contents of the message\\n * @param encodedData Data used to send the message; specific to connector\\n * @param caller Who called the function (sent the message)\\n */\\n event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n /**\\n * @notice Emitted whenever a message is successfully received over an AMB\\n * @param data The contents of the message\\n * @param caller Who called the function\\n */\\n event MessageProcessed(bytes data, address caller);\\n\\n // ============ Public fns ============\\n\\n function processMessage(bytes memory _data) external;\\n\\n function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/ambs/optimism/OptimismAmb.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @dev The optimism bridge shares both of these functions, but it is important\\n * to note that when going from L2 -> L1, the message cannot be processed by the\\n * AMB until the challenge period elapses.\\n *\\n * HOWEVER, before the challenge elapses, you can read the state of the L2 as it is\\n * placed on mainnet. By processing data from the L2 state, we are able to \\\"circumvent\\\"\\n * this delay to a reasonable degree.\\n *\\n * This means that for messages going L1 -> L2, you can call \\\"processMessage\\\" and expect\\n * the call to be executed to pass up the aggregate root. When going from L2 -> L1, you\\n * must read the root from the L2 state\\n *\\n * L2 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2CrossDomainMessenger.sol\\n * L1 messenger: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol\\n */\\ninterface OptimismAmb {\\n function sendMessage(\\n address _target,\\n bytes memory _message,\\n uint32 _gasLimit\\n ) external;\\n\\n function xDomainMessageSender() external view returns (address);\\n}\\n\",\"keccak256\":\"0xbce6aaa568441bd8ad60f2b5f1ad8d9e3c61cbc91ce4405d7a390980920f66f3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n // ========== Custom Errors ===========\\n\\n error MerkleLib__insert_treeIsFull();\\n\\n // ============ Constants =============\\n\\n uint256 internal constant TREE_DEPTH = 32;\\n uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n /**\\n * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n * Used to shortcut calculation in root calculation methods below.\\n */\\n bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n // ============= Structs ==============\\n\\n /**\\n * @notice Struct representing incremental merkle tree. Contains current\\n * branch and the number of inserted leaves in the tree.\\n **/\\n struct Tree {\\n bytes32[TREE_DEPTH] branch;\\n uint256 count;\\n }\\n\\n // ========= Write Methods =========\\n\\n /**\\n * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n * returns an updated version of that tree.\\n * @dev Reverts if the tree is already full.\\n * @param node Element to insert into tree.\\n * @return Tree Updated tree.\\n **/\\n function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n uint256 size = ++tree.count;\\n if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n // branch along the way.\\n for (uint256 i; i < TREE_DEPTH; ) {\\n // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n if ((size & 1) == 1) {\\n // If i > 0, then this node will be a hash of the original node with every layer up\\n // until layer `i`.\\n tree.branch[i] = node;\\n return tree;\\n }\\n // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n node = keccak256(abi.encodePacked(tree.branch[i], node));\\n size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n unchecked {\\n ++i;\\n }\\n }\\n // As the loop should always end prematurely with the `return` statement, this code should\\n // be unreachable. We revert here just to be safe.\\n revert MerkleLib__insert_treeIsFull();\\n }\\n\\n // ========= Read Methods =========\\n\\n /**\\n * @notice Calculates and returns tree's current root.\\n * @return _current bytes32 root.\\n **/\\n function root(Tree storage tree) internal view returns (bytes32 _current) {\\n uint256 _index = tree.count;\\n\\n if (_index == 0) {\\n return Z_32;\\n }\\n\\n uint256 i;\\n assembly {\\n let TREE_SLOT := tree.slot\\n\\n for {\\n\\n } true {\\n\\n } {\\n for {\\n\\n } true {\\n\\n } {\\n if and(_index, 1) {\\n mstore(0, sload(TREE_SLOT))\\n mstore(0x20, Z_0)\\n _current := keccak256(0, 0x40)\\n break\\n }\\n\\n if and(_index, shl(1, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 1)))\\n mstore(0x20, Z_1)\\n _current := keccak256(0, 0x40)\\n i := 1\\n break\\n }\\n\\n if and(_index, shl(2, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 2)))\\n mstore(0x20, Z_2)\\n _current := keccak256(0, 0x40)\\n i := 2\\n break\\n }\\n\\n if and(_index, shl(3, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 3)))\\n mstore(0x20, Z_3)\\n _current := keccak256(0, 0x40)\\n i := 3\\n break\\n }\\n\\n if and(_index, shl(4, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 4)))\\n mstore(0x20, Z_4)\\n _current := keccak256(0, 0x40)\\n i := 4\\n break\\n }\\n\\n if and(_index, shl(5, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 5)))\\n mstore(0x20, Z_5)\\n _current := keccak256(0, 0x40)\\n i := 5\\n break\\n }\\n\\n if and(_index, shl(6, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 6)))\\n mstore(0x20, Z_6)\\n _current := keccak256(0, 0x40)\\n i := 6\\n break\\n }\\n\\n if and(_index, shl(7, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 7)))\\n mstore(0x20, Z_7)\\n _current := keccak256(0, 0x40)\\n i := 7\\n break\\n }\\n\\n if and(_index, shl(8, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 8)))\\n mstore(0x20, Z_8)\\n _current := keccak256(0, 0x40)\\n i := 8\\n break\\n }\\n\\n if and(_index, shl(9, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 9)))\\n mstore(0x20, Z_9)\\n _current := keccak256(0, 0x40)\\n i := 9\\n break\\n }\\n\\n if and(_index, shl(10, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 10)))\\n mstore(0x20, Z_10)\\n _current := keccak256(0, 0x40)\\n i := 10\\n break\\n }\\n\\n if and(_index, shl(11, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 11)))\\n mstore(0x20, Z_11)\\n _current := keccak256(0, 0x40)\\n i := 11\\n break\\n }\\n\\n if and(_index, shl(12, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 12)))\\n mstore(0x20, Z_12)\\n _current := keccak256(0, 0x40)\\n i := 12\\n break\\n }\\n\\n if and(_index, shl(13, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 13)))\\n mstore(0x20, Z_13)\\n _current := keccak256(0, 0x40)\\n i := 13\\n break\\n }\\n\\n if and(_index, shl(14, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 14)))\\n mstore(0x20, Z_14)\\n _current := keccak256(0, 0x40)\\n i := 14\\n break\\n }\\n\\n if and(_index, shl(15, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 15)))\\n mstore(0x20, Z_15)\\n _current := keccak256(0, 0x40)\\n i := 15\\n break\\n }\\n\\n if and(_index, shl(16, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 16)))\\n mstore(0x20, Z_16)\\n _current := keccak256(0, 0x40)\\n i := 16\\n break\\n }\\n\\n if and(_index, shl(17, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 17)))\\n mstore(0x20, Z_17)\\n _current := keccak256(0, 0x40)\\n i := 17\\n break\\n }\\n\\n if and(_index, shl(18, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 18)))\\n mstore(0x20, Z_18)\\n _current := keccak256(0, 0x40)\\n i := 18\\n break\\n }\\n\\n if and(_index, shl(19, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 19)))\\n mstore(0x20, Z_19)\\n _current := keccak256(0, 0x40)\\n i := 19\\n break\\n }\\n\\n if and(_index, shl(20, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 20)))\\n mstore(0x20, Z_20)\\n _current := keccak256(0, 0x40)\\n i := 20\\n break\\n }\\n\\n if and(_index, shl(21, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 21)))\\n mstore(0x20, Z_21)\\n _current := keccak256(0, 0x40)\\n i := 21\\n break\\n }\\n\\n if and(_index, shl(22, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 22)))\\n mstore(0x20, Z_22)\\n _current := keccak256(0, 0x40)\\n i := 22\\n break\\n }\\n\\n if and(_index, shl(23, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 23)))\\n mstore(0x20, Z_23)\\n _current := keccak256(0, 0x40)\\n i := 23\\n break\\n }\\n\\n if and(_index, shl(24, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 24)))\\n mstore(0x20, Z_24)\\n _current := keccak256(0, 0x40)\\n i := 24\\n break\\n }\\n\\n if and(_index, shl(25, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 25)))\\n mstore(0x20, Z_25)\\n _current := keccak256(0, 0x40)\\n i := 25\\n break\\n }\\n\\n if and(_index, shl(26, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 26)))\\n mstore(0x20, Z_26)\\n _current := keccak256(0, 0x40)\\n i := 26\\n break\\n }\\n\\n if and(_index, shl(27, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 27)))\\n mstore(0x20, Z_27)\\n _current := keccak256(0, 0x40)\\n i := 27\\n break\\n }\\n\\n if and(_index, shl(28, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 28)))\\n mstore(0x20, Z_28)\\n _current := keccak256(0, 0x40)\\n i := 28\\n break\\n }\\n\\n if and(_index, shl(29, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 29)))\\n mstore(0x20, Z_29)\\n _current := keccak256(0, 0x40)\\n i := 29\\n break\\n }\\n\\n if and(_index, shl(30, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 30)))\\n mstore(0x20, Z_30)\\n _current := keccak256(0, 0x40)\\n i := 30\\n break\\n }\\n\\n if and(_index, shl(31, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 31)))\\n mstore(0x20, Z_31)\\n _current := keccak256(0, 0x40)\\n i := 31\\n break\\n }\\n\\n _current := Z_32\\n i := 32\\n break\\n }\\n\\n if gt(i, 30) {\\n break\\n }\\n\\n {\\n if lt(i, 1) {\\n switch and(_index, shl(1, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_1)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 1)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 2) {\\n switch and(_index, shl(2, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_2)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 2)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 3) {\\n switch and(_index, shl(3, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_3)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 3)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 4) {\\n switch and(_index, shl(4, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_4)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 4)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 5) {\\n switch and(_index, shl(5, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_5)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 5)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 6) {\\n switch and(_index, shl(6, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_6)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 6)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 7) {\\n switch and(_index, shl(7, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_7)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 7)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 8) {\\n switch and(_index, shl(8, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_8)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 8)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 9) {\\n switch and(_index, shl(9, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_9)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 9)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 10) {\\n switch and(_index, shl(10, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_10)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 10)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 11) {\\n switch and(_index, shl(11, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_11)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 11)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 12) {\\n switch and(_index, shl(12, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_12)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 12)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 13) {\\n switch and(_index, shl(13, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_13)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 13)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 14) {\\n switch and(_index, shl(14, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_14)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 14)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 15) {\\n switch and(_index, shl(15, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_15)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 15)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 16) {\\n switch and(_index, shl(16, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_16)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 16)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 17) {\\n switch and(_index, shl(17, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_17)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 17)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 18) {\\n switch and(_index, shl(18, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_18)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 18)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 19) {\\n switch and(_index, shl(19, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_19)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 19)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 20) {\\n switch and(_index, shl(20, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_20)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 20)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 21) {\\n switch and(_index, shl(21, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_21)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 21)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 22) {\\n switch and(_index, shl(22, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_22)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 22)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 23) {\\n switch and(_index, shl(23, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_23)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 23)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 24) {\\n switch and(_index, shl(24, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_24)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 24)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 25) {\\n switch and(_index, shl(25, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_25)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 25)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 26) {\\n switch and(_index, shl(26, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_26)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 26)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 27) {\\n switch and(_index, shl(27, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_27)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 27)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 28) {\\n switch and(_index, shl(28, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_28)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 28)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 29) {\\n switch and(_index, shl(29, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_29)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 29)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 30) {\\n switch and(_index, shl(30, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_30)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 30)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 31) {\\n switch and(_index, shl(31, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_31)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 31)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n }\\n\\n break\\n }\\n }\\n }\\n\\n /**\\n * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n * a merkle branch, and the index of `_item` in the tree.\\n * @param _item Merkle leaf\\n * @param _branch Merkle proof\\n * @param _index Index of `_item` in tree\\n * @return _current Calculated merkle root\\n **/\\n function branchRoot(\\n bytes32 _item,\\n bytes32[TREE_DEPTH] memory _branch,\\n uint256 _index\\n ) internal pure returns (bytes32 _current) {\\n assembly {\\n _current := _item\\n let BRANCH_DATA_OFFSET := _branch\\n let f\\n\\n f := shl(5, and(_index, 1))\\n mstore(f, _current)\\n mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(1, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(2, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(3, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(4, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(5, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(6, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(7, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(8, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(9, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(10, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(11, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(12, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(13, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(14, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(15, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(16, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(17, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(18, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(19, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(20, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(21, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(22, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(23, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(24, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(25, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(26, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(27, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(28, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(29, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(30, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(31, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n _current := keccak256(0, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Message.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../shared/libraries/TypedMemView.sol\\\";\\nimport {TypeCasts} from \\\"../../shared/libraries/TypeCasts.sol\\\";\\n\\n/**\\n * @title Message Library\\n * @author Illusory Systems Inc.\\n * @notice Library for formatted messages used by Home and Replica.\\n **/\\nlibrary Message {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // Number of bytes in formatted message before `body` field\\n uint256 internal constant PREFIX_LENGTH = 76;\\n\\n /**\\n * @notice Returns formatted (packed) message with provided fields\\n * @param _originDomain Domain of home chain\\n * @param _sender Address of sender as bytes32\\n * @param _nonce Destination-specific nonce\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipient Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes of message body\\n * @return Formatted message\\n **/\\n function formatMessage(\\n uint32 _originDomain,\\n bytes32 _sender,\\n uint32 _nonce,\\n uint32 _destinationDomain,\\n bytes32 _recipient,\\n bytes memory _messageBody\\n ) internal pure returns (bytes memory) {\\n return abi.encodePacked(_originDomain, _sender, _nonce, _destinationDomain, _recipient, _messageBody);\\n }\\n\\n /**\\n * @notice Returns leaf of formatted message with provided fields.\\n * @param _origin Domain of home chain\\n * @param _sender Address of sender as bytes32\\n * @param _nonce Destination-specific nonce number\\n * @param _destination Domain of destination chain\\n * @param _recipient Address of recipient on destination chain as bytes32\\n * @param _body Raw bytes of message body\\n * @return Leaf (hash) of formatted message\\n **/\\n function messageHash(\\n uint32 _origin,\\n bytes32 _sender,\\n uint32 _nonce,\\n uint32 _destination,\\n bytes32 _recipient,\\n bytes memory _body\\n ) internal pure returns (bytes32) {\\n return keccak256(formatMessage(_origin, _sender, _nonce, _destination, _recipient, _body));\\n }\\n\\n /// @notice Returns message's origin field\\n function origin(bytes29 _message) internal pure returns (uint32) {\\n return uint32(_message.indexUint(0, 4));\\n }\\n\\n /// @notice Returns message's sender field\\n function sender(bytes29 _message) internal pure returns (bytes32) {\\n return _message.index(4, 32);\\n }\\n\\n /// @notice Returns message's nonce field\\n function nonce(bytes29 _message) internal pure returns (uint32) {\\n return uint32(_message.indexUint(36, 4));\\n }\\n\\n /// @notice Returns message's destination field\\n function destination(bytes29 _message) internal pure returns (uint32) {\\n return uint32(_message.indexUint(40, 4));\\n }\\n\\n /// @notice Returns message's recipient field as bytes32\\n function recipient(bytes29 _message) internal pure returns (bytes32) {\\n return _message.index(44, 32);\\n }\\n\\n /// @notice Returns message's recipient field as an address\\n function recipientAddress(bytes29 _message) internal pure returns (address) {\\n return TypeCasts.bytes32ToAddress(recipient(_message));\\n }\\n\\n /// @notice Returns message's body field as bytes29 (refer to TypedMemView library for details on bytes29 type)\\n function body(bytes29 _message) internal pure returns (bytes29) {\\n return _message.slice(PREFIX_LENGTH, _message.len() - PREFIX_LENGTH, 0);\\n }\\n\\n function leaf(bytes29 _message) internal pure returns (bytes32) {\\n uint256 loc = _message.loc();\\n uint256 len = _message.len();\\n /*\\n prev:\\n return\\n messageHash(\\n origin(_message),\\n sender(_message),\\n nonce(_message),\\n destination(_message),\\n recipient(_message),\\n TypedMemView.clone(body(_message))\\n );\\n\\n below added for gas optimization\\n */\\n bytes32 hash;\\n assembly {\\n hash := keccak256(loc, len)\\n }\\n return hash;\\n }\\n}\\n\",\"keccak256\":\"0xa4212f7b88146588e8e0e24cddbc5dae6269618a722b34f00ea322b33fa1f36a\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/RateLimited.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice An abstract contract intended to manage the rate limiting aspect of spoke\\n * connector messaging. Rate limiting the number of messages we can send over a span of\\n * blocks is used to mitigate key DoSing vectors for transporting messages between chains.\\n */\\nabstract contract RateLimited {\\n // ========== Custom Errors ===========\\n\\n error RateLimited__rateLimited_messageSendRateExceeded();\\n\\n // ============ Events ============\\n\\n event SendRateLimitUpdated(address updater, uint256 newRateLimit);\\n\\n // ============ Public Storage ============\\n\\n /**\\n * @notice The number of blocks required between message sending events.\\n * @dev NOTE: This value is 0 by default, meaning that rate limiting functionality\\n * will naturally be disabled by default.\\n */\\n uint256 public rateLimitBlocks;\\n\\n /**\\n * @notice Tracks the last block that we sent a message.\\n */\\n uint256 public lastSentBlock;\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Checks to see if we can send this block, given the current rate limit\\n * setting and the last block we sent a message. If rate limit has been surpassed,\\n * we update the `lastSentBlock` to be the current block.\\n */\\n modifier rateLimited() {\\n // Check to make sure we have surpassed the number of rate limit blocks.\\n if (lastSentBlock + rateLimitBlocks > block.number) {\\n revert RateLimited__rateLimited_messageSendRateExceeded();\\n }\\n // Update the last block we sent a message to be the current one.\\n lastSentBlock = block.number;\\n _;\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Update the current rate limit to a new value.\\n */\\n function _setRateLimitBlocks(uint256 _newRateLimit) internal {\\n require(_newRateLimit != rateLimitBlocks, \\\"!new rate limit\\\");\\n // NOTE: Setting the block rate limit interval to 0 will result in rate limiting\\n // being disabled.\\n rateLimitBlocks = _newRateLimit;\\n emit SendRateLimitUpdated(msg.sender, _newRateLimit);\\n }\\n}\\n\",\"keccak256\":\"0xcc185ae966c87441490aaa8c0779a7b3085961a7b8512d5973f1c34f641eeae3\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/SnapshotId.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title SnapshotId library\\n * @notice A library to be used in spoke connector and root manager to calculates the current snapshot id\\n */\\nlibrary SnapshotId {\\n /**\\n * @notice Duration of the snapshot\\n * @dev Off-chain agents could change the effective snapshot length by skipping snapshots. This is the\\n * smallest unit of snapshot duration, not just the only option.\\n */\\n uint256 constant SNAPSHOT_DURATION = 30 minutes;\\n\\n /**\\n * @notice This function calculates the last completed snapshot id\\n * @return _lastCompletedSnapshotId The last completed snapshot id\\n */\\n function getLastCompletedSnapshotId() internal view returns (uint256 _lastCompletedSnapshotId) {\\n unchecked {\\n _lastCompletedSnapshotId = block.timestamp / SNAPSHOT_DURATION;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe1b04329fe0140f863f1916daa081ca6faf4956064a48d8afd8febe3baca2d4b\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n // ========== Custom Errors ===========\\n\\n error ProposedOwnable__onlyOwner_notOwner();\\n error ProposedOwnable__onlyProposed_notProposedOwner();\\n error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n error ProposedOwnable__proposeNewOwner_invalidProposal();\\n error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n error ProposedOwnable__renounceOwnership_noProposal();\\n error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // ============ Properties ============\\n\\n address private _owner;\\n\\n address private _proposed;\\n uint256 private _proposedOwnershipTimestamp;\\n\\n uint256 private constant _delay = 7 days;\\n\\n // ======== Getters =========\\n\\n /**\\n * @notice Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposed() public view virtual returns (address) {\\n return _proposed;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposedTimestamp() public view virtual returns (uint256) {\\n return _proposedOwnershipTimestamp;\\n }\\n\\n /**\\n * @notice Returns the delay period before a new owner can be accepted.\\n */\\n function delay() public view virtual returns (uint256) {\\n return _delay;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if the ownership delay has not elapsed\\n */\\n modifier ownershipDelayElapsed() {\\n // Ensure delay has elapsed\\n if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n _;\\n }\\n\\n /**\\n * @notice Indicates if the ownership has been renounced() by\\n * checking if current owner is address(0)\\n */\\n function renounced() public view returns (bool) {\\n return _owner == address(0);\\n }\\n\\n // ======== External =========\\n\\n /**\\n * @notice Sets the timestamp for an owner to be proposed, and sets the\\n * newly proposed owner as step 1 in a 2-step process\\n */\\n function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n // Contract as source of truth\\n if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n // Sanity check: reasonable proposal\\n if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n _setProposed(newlyProposed);\\n }\\n\\n /**\\n * @notice Renounces ownership of the contract after a delay\\n */\\n function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n // Ensure there has been a proposal cycle started\\n if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n // Require proposed is set to 0\\n if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(address(0));\\n }\\n\\n /**\\n * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n // NOTE: no need to check if _owner == _proposed, because the _proposed\\n // is 0-d out and this check is implicitly enforced by modifier\\n\\n // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n // the only time this would happen is if the _proposed was never\\n // set (will fail from modifier) or if the owner == _proposed (checked\\n // above)\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(_proposed);\\n }\\n\\n // ======== Internal =========\\n\\n function _setOwner(address newOwner) internal {\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n delete _proposedOwnershipTimestamp;\\n delete _proposed;\\n }\\n\\n function _setProposed(address newlyProposed) private {\\n _proposedOwnershipTimestamp = block.timestamp;\\n _proposed = newlyProposed;\\n emit OwnershipProposed(newlyProposed);\\n }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n /**\\n * @dev Initializes the contract setting the deployer as the initial\\n */\\n function __ProposedOwnable_init() internal onlyInitializing {\\n __ProposedOwnable_init_unchained();\\n }\\n\\n function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n _setOwner(msg.sender);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n /**\\n * @dev This emits when change in ownership of a contract is proposed.\\n */\\n event OwnershipProposed(address indexed proposedOwner);\\n\\n /**\\n * @dev This emits when ownership of a contract changes.\\n */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @notice Get the address of the owner\\n * @return owner_ The address of the owner.\\n */\\n function owner() external view returns (address owner_);\\n\\n /**\\n * @notice Get the address of the proposed owner\\n * @return proposed_ The address of the proposed.\\n */\\n function proposed() external view returns (address proposed_);\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n * @param newlyProposed The proposed new owner of the contract\\n */\\n function proposeNewOwner(address newlyProposed) external;\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n */\\n function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/ExcessivelySafeCall.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// Taken from: https://github.com/nomad-xyz/ExcessivelySafeCall\\n// NOTE: There is a difference between npm latest and github main versions\\n// where the latest github version allows you to specify an ether value.\\n\\nlibrary ExcessivelySafeCall {\\n uint256 constant LOW_28_MASK = 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;\\n\\n /// @notice Use when you _really_ really _really_ don't trust the called\\n /// contract. This prevents the called contract from causing reversion of\\n /// the caller in as many ways as we can.\\n /// @dev The main difference between this and a solidity low-level call is\\n /// that we limit the number of bytes that the callee can cause to be\\n /// copied to caller memory. This prevents stupid things like malicious\\n /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n /// to memory.\\n /// @param _target The address to call\\n /// @param _gas The amount of gas to forward to the remote contract\\n /// @param _value The value in wei to send to the remote contract\\n /// @param _maxCopy The maximum number of bytes of returndata to copy\\n /// to memory.\\n /// @param _calldata The data to send to the remote contract\\n /// @return success and returndata, as `.call()`. Returndata is capped to\\n /// `_maxCopy` bytes.\\n function excessivelySafeCall(\\n address _target,\\n uint256 _gas,\\n uint256 _value,\\n uint16 _maxCopy,\\n bytes memory _calldata\\n ) internal returns (bool, bytes memory) {\\n // set up for assembly call\\n uint256 _toCopy;\\n bool _success;\\n bytes memory _returnData = new bytes(_maxCopy);\\n // dispatch message to recipient\\n // by assembly calling \\\"handle\\\" function\\n // we call via assembly to avoid memcopying a very large returndata\\n // returned by a malicious contract\\n assembly {\\n _success := call(\\n _gas, // gas\\n _target, // recipient\\n _value, // ether value\\n add(_calldata, 0x20), // inloc\\n mload(_calldata), // inlen\\n 0, // outloc\\n 0 // outlen\\n )\\n // limit our copy to 256 bytes\\n _toCopy := returndatasize()\\n if gt(_toCopy, _maxCopy) {\\n _toCopy := _maxCopy\\n }\\n // Store the length of the copied bytes\\n mstore(_returnData, _toCopy)\\n // copy the bytes from returndata[0:_toCopy]\\n returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n }\\n return (_success, _returnData);\\n }\\n\\n /// @notice Use when you _really_ really _really_ don't trust the called\\n /// contract. This prevents the called contract from causing reversion of\\n /// the caller in as many ways as we can.\\n /// @dev The main difference between this and a solidity low-level call is\\n /// that we limit the number of bytes that the callee can cause to be\\n /// copied to caller memory. This prevents stupid things like malicious\\n /// contracts returning 10,000,000 bytes causing a local OOG when copying\\n /// to memory.\\n /// @param _target The address to call\\n /// @param _gas The amount of gas to forward to the remote contract\\n /// @param _maxCopy The maximum number of bytes of returndata to copy\\n /// to memory.\\n /// @param _calldata The data to send to the remote contract\\n /// @return success and returndata, as `.call()`. Returndata is capped to\\n /// `_maxCopy` bytes.\\n function excessivelySafeStaticCall(\\n address _target,\\n uint256 _gas,\\n uint16 _maxCopy,\\n bytes memory _calldata\\n ) internal view returns (bool, bytes memory) {\\n // set up for assembly call\\n uint256 _toCopy;\\n bool _success;\\n bytes memory _returnData = new bytes(_maxCopy);\\n // dispatch message to recipient\\n // by assembly calling \\\"handle\\\" function\\n // we call via assembly to avoid memcopying a very large returndata\\n // returned by a malicious contract\\n assembly {\\n _success := staticcall(\\n _gas, // gas\\n _target, // recipient\\n add(_calldata, 0x20), // inloc\\n mload(_calldata), // inlen\\n 0, // outloc\\n 0 // outlen\\n )\\n // limit our copy to 256 bytes\\n _toCopy := returndatasize()\\n if gt(_toCopy, _maxCopy) {\\n _toCopy := _maxCopy\\n }\\n // Store the length of the copied bytes\\n mstore(_returnData, _toCopy)\\n // copy the bytes from returndata[0:_toCopy]\\n returndatacopy(add(_returnData, 0x20), 0, _toCopy)\\n }\\n return (_success, _returnData);\\n }\\n\\n /**\\n * @notice Swaps function selectors in encoded contract calls\\n * @dev Allows reuse of encoded calldata for functions with identical\\n * argument types but different names. It simply swaps out the first 4 bytes\\n * for the new selector. This function modifies memory in place, and should\\n * only be used with caution.\\n * @param _newSelector The new 4-byte selector\\n * @param _buf The encoded contract args\\n */\\n function swapSelector(bytes4 _newSelector, bytes memory _buf) internal pure {\\n require(_buf.length > 4 - 1);\\n uint256 _mask = LOW_28_MASK;\\n assembly {\\n // load the first word of\\n let _word := mload(add(_buf, 0x20))\\n // mask out the top 4 bytes\\n // /x\\n _word := and(_word, _mask)\\n _word := or(_newSelector, _word)\\n mstore(add(_buf, 0x20), _word)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x5472b56fa56886620b1a8e4e2f12f8925500bb237a4dad38651c79db69f0724c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x6101606040526001600f553480156200001757600080fd5b506040516200490a3803806200490a8339810160408190526200003a9162000497565b808083806101200151816000015182602001518360400151846060015185608001516200006d336200031e60201b60201c565b8463ffffffff16600003620000b85760405162461bcd60e51b815260206004820152600c60248201526b32b6b83a3c903237b6b0b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038216620001045760405162461bcd60e51b815260206004820152601160248201527032b6b83a3c903937b7ba26b0b730b3b2b960791b6044820152606401620000af565b63ffffffff8086166080526001600160a01b0380851660a05283811660c05290851660e0528116156200013c576200013c8162000383565b604080516001600160a01b0385811682528481166020830152831681830152905163ffffffff86811692908816917f4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f09181900360600190a350506003805460ff60a01b191690555050600480546001600160a01b0319166001600160a01b03939093169290921790915550600160075561016081015161014082015180821015620001fa576040516350ccf05160e01b815260040160405180910390fd5b620cf84f8360a0015111620002415760405162461bcd60e51b815260206004820152600c60248201526b2170726f636573732067617360a01b6044820152606401620000af565b613a978360c0015111620002875760405162461bcd60e51b815260206004820152600c60248201526b21726573657276652067617360a01b6044820152606401620000af565b60a08301516101205260c0830151610140526101008301516001600160a01b0316620002e55760405162461bcd60e51b815260206004820152600c60248201526b217a65726f206d65726b6c6560a01b6044820152606401620000af565b610100808401516001600160a01b0316905260e0909201516008556011919091556010556200031481620003ec565b505050506200058c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b60145460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601455565b60405161018081016001600160401b03811182821017156200045f57634e487b7160e01b600052604160045260246000fd5b60405290565b805163ffffffff811681146200047a57600080fd5b919050565b80516001600160a01b03811681146200047a57600080fd5b6000808284036101a0811215620004ad57600080fd5b61018080821215620004be57600080fd5b620004c86200042d565b9150620004d58562000465565b8252620004e56020860162000465565b6020830152620004f8604086016200047f565b60408301526200050b606086016200047f565b60608301526200051e608086016200047f565b608083015260a085015160a083015260c085015160c083015260e085015160e0830152610100620005518187016200047f565b90830152610120620005658682016200047f565b90830152610140858101519083015261016080860151908301529093015192949293505050565b60805160a05160c05160e05161010051610120516101405161429762000673600039600081816104cf01526128fa015260008181610bb20152818161291b01526129ad01526000818161096001528181610fbb015281816112ac015281816114100152818161155c0152818161206c01528181612108015281816121d5015281816122a2015281816125e401526128920152600061045001526000610734015260008181610b680152818161110001528181612d8b0152612eb30152600081816106660152818161087c01528181610de80152818161225301526127f701526142976000f3fe6080604052600436106103c75760003560e01c80638456cb59116101f2578063cbfa20211161010d578063d3c805b7116100a0578063db1b76591161006f578063db1b765914610bd4578063e0fed01014610bf4578063f4b6e41014610c14578063fa31de0114610c2a57600080fd5b8063d3c805b714610b41578063d69f9d6114610b56578063d7d317b314610b8a578063d88beda214610ba057600080fd5b8063d1851c92116100dc578063d1851c9214610acf578063d232c22014610aed578063d2a3cc7114610b0c578063d3c54fe514610b2c57600080fd5b8063cbfa202114610a6d578063cc39428314610a82578063ceb3454e14610aa2578063d1745e4f14610ab857600080fd5b8063a792c29b11610185578063b1f8100d11610154578063b1f8100d146109f8578063b2f8764314610a18578063b697f53114610a38578063c5b350df14610a5857600080fd5b8063a792c29b14610982578063a941f3f3146109a2578063ad9c0c2e146109c2578063b03cd418146109d857600080fd5b806398c9f2b9116101c157806398c9f2b9146108de5780639d3117c71461090e5780639fa92f9d1461093b578063a01892a51461094e57600080fd5b80638456cb59146108585780638d3638f41461086d5780638da5cb5b146108a05780638e02f759146108be57600080fd5b806351cc57cc116102e257806360caf7a0116102755780636a42b8f8116102445780636a42b8f8146107ed5780636b04a93314610803578063715018a6146108235780637850b0201461083857600080fd5b806360caf7a01461076e5780636159ada11461078857806365eaf11b146107b857806368742da6146107cd57600080fd5b80635bd11efc116102b15780635bd11efc146106ce5780635c975abb146106ee5780635d3087611461070d5780635f61e3ec1461072257600080fd5b806351cc57cc1461062757806352a9674b14610654578063572386ca14610688578063579c1618146106b857600080fd5b80632bb1ae7c1161035a5780634a2db1da116103295780634a2db1da1461058e5780634ff746f6146105be578063508a109b146105de5780635190bc53146105fe57600080fd5b80632bb1ae7c14610511578063301f07c3146105245780633cf52ffb146105645780633f4ba83a1461057957600080fd5b80631eeaabea116103965780631eeaabea1461048757806320f62eda146104a757806325e3beda146104bd578063263ef354146104f157600080fd5b8063047dbeb8146103d357806309d632d3146103fc578063111c18371461041e578063141684161461043e57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e960145481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b5061041c610417366004613c2e565b610c58565b005b34801561042a57600080fd5b5061041c610439366004613c4b565b610ccc565b34801561044a57600080fd5b506104727f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103f3565b34801561049357600080fd5b5061041c6104a2366004613c6d565b610e40565b3480156104b357600080fd5b506103e960105481565b3480156104c957600080fd5b506103e97f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fd57600080fd5b5061041c61050c366004613c6d565b610eea565b61041c61051f366004613d29565b610f78565b34801561053057600080fd5b5061055461053f366004613c6d565b600a6020526000908152604090205460ff1681565b60405190151581526020016103f3565b34801561057057600080fd5b506002546103e9565b34801561058557600080fd5b5061041c6110b8565b34801561059a57600080fd5b506105546105a9366004613c2e565b60136020526000908152604090205460ff1681565b3480156105ca57600080fd5b5061041c6105d9366004613d29565b6110f5565b3480156105ea57600080fd5b5061041c6105f9366004613d5e565b61119b565b34801561060a57600080fd5b50610554610619366004613c2e565b6001600160a01b0316301490565b34801561063357600080fd5b506103e9610642366004613c6d565b600e6020526000908152604090205481565b34801561066057600080fd5b506104727f000000000000000000000000000000000000000000000000000000000000000081565b34801561069457600080fd5b506105546106a3366004613c6d565b600c6020526000908152604090205460ff1681565b3480156106c457600080fd5b506103e960055481565b3480156106da57600080fd5b5061041c6106e9366004613c2e565b611521565b3480156106fa57600080fd5b50600354600160a01b900460ff16610554565b34801561071957600080fd5b506103e9600181565b34801561072e57600080fd5b506107567f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103f3565b34801561077a57600080fd5b506012546105549060ff1681565b34801561079457600080fd5b506105546107a3366004613c2e565b600d6020526000908152604090205460ff1681565b3480156107c457600080fd5b506103e9611558565b3480156107d957600080fd5b5061041c6107e8366004613c2e565b6115e1565b3480156107f957600080fd5b5062093a806103e9565b34801561080f57600080fd5b5061041c61081e366004613c6d565b61165e565b34801561082f57600080fd5b5061041c611721565b34801561084457600080fd5b5061041c610853366004613c6d565b611781565b34801561086457600080fd5b5061041c6117b5565b34801561087957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610472565b3480156108ac57600080fd5b506000546001600160a01b0316610756565b3480156108ca57600080fd5b5061041c6108d9366004613dfa565b611869565b3480156108ea57600080fd5b506105546108f9366004613c6d565b600b6020526000908152604090205460ff1681565b34801561091a57600080fd5b506103e9610929366004613c6d565b60096020526000908152604090205481565b34801561094757600080fd5b5030610756565b34801561095a57600080fd5b506107567f000000000000000000000000000000000000000000000000000000000000000081565b34801561098e57600080fd5b50600454610756906001600160a01b031681565b3480156109ae57600080fd5b5061041c6109bd366004613c6d565b611990565b3480156109ce57600080fd5b506103e960085481565b3480156109e457600080fd5b5061041c6109f3366004613c2e565b611a41565b348015610a0457600080fd5b5061041c610a13366004613c2e565b611ab8565b348015610a2457600080fd5b5061041c610a33366004613c2e565b611b56565b348015610a4457600080fd5b5061041c610a53366004613c2e565b611c1d565b348015610a6457600080fd5b5061041c611ce7565b348015610a7957600080fd5b5061041c611d57565b348015610a8e57600080fd5b50600354610756906001600160a01b031681565b348015610aae57600080fd5b506103e9600f5481565b348015610ac457600080fd5b5061070842046103e9565b348015610adb57600080fd5b506001546001600160a01b0316610756565b348015610af957600080fd5b506000546001600160a01b031615610554565b348015610b1857600080fd5b5061041c610b27366004613c2e565b611e5a565b348015610b3857600080fd5b5061041c611f31565b348015610b4d57600080fd5b506107086103e9565b348015610b6257600080fd5b506107567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9657600080fd5b506103e960065481565b348015610bac57600080fd5b506103e97f000000000000000000000000000000000000000000000000000000000000000081565b348015610be057600080fd5b50610554610bef366004613c2e565b611fb8565b348015610c0057600080fd5b5061041c610c0f366004613c6d565b611fc9565b348015610c2057600080fd5b506103e960115481565b348015610c3657600080fd5b50610c4a610c45366004613e38565b611ffd565b6040516103f3929190613ee1565b6000546001600160a01b03163314610c83576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b038116600081815260136020526040808220805460ff19169055517fbab6b194452fd4fa50e0ca09bf0f89976da30a2b92fdf91372ad1a176d81e3289190a250565b610cd4612370565b3360009081526013602052604090205460ff16610d045760405163dce46cfd60e01b815260040160405180910390fd5b60125460ff16610d2757604051637022548360e11b815260040160405180910390fd5b600f54600114610d4a57604051632bf9cc6b60e11b815260040160405180910390fd5b60008281526009602052604090205415610d97576000828152600960205260408082208290555183917f25baf79d6178f15bc11aefa9950ab45ad2e15f1fb6d8aa3b4f7889a6b2e2f70491a25b600060105443610da79190613f10565b60408051602081018690529081018490526060810182905290915060800160408051601f19818403018152908290528051602091820120600f5563ffffffff7f00000000000000000000000000000000000000000000000000000000000000001682528291849186917f7008dd9e43d32c464bcffa3c51a95b0d1038885b09f490062dee0fee59054e9c910160405180910390a4505050565b6000546001600160a01b03163314610e6b576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610eb05760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b6000546001600160a01b03163314610f15576040516311a8a1bb60e31b815260040160405180910390fd5b6011548103610f375760405163545924bf60e11b815260040160405180910390fd5b60115460408051918252602082018390527fdfad87ee418f8b636836b030634c8040055c9a5f641899df5a5d1d3c554fee47910160405180910390a1601155565b610f80612370565b43600554600654610f919190613f10565b1115610fb0576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b9190613f23565b6000818152600c602052604090205490915060ff16156110915760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610ea7565b6000818152600c60205260409020805460ff191660011790556110b481836123bd565b5050565b6000546001600160a01b031633146110e3576040516311a8a1bb60e31b815260040160405180910390fd5b6110eb61242d565b6110f361247d565b565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111565760405162461bcd60e51b8152600401610ea79060208082526004908201526310a0a6a160e11b604082015260600190565b61115f816124d2565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051611190929190613f3c565b60405180910390a150565b6111a3612370565b6111ab612572565b836111e25760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610ea7565b6000858560008181106111f7576111f7613f66565b90506020028101906112099190613f7c565b6112139080613f9d565b604051611221929190613feb565b604051809103902090506000611288828888600081811061124457611244613f66565b90506020028101906112569190613f7c565b6020018989600081811061126c5761126c613f66565b905060200281019061127e9190613f7c565b61042001356125cb565b9050611296818686866126e6565b6040516398fae8e960e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906398fae8e990602401600060405180830381600087803b1580156112f857600080fd5b505af115801561130c573d6000803e3d6000fd5b5088925060019150505b818163ffffffff1610156114805788888263ffffffff1681811061133c5761133c613f66565b905060200281019061134e9190613f7c565b6113589080613f9d565b604051611366929190613feb565b6040518091039020935060006113bb858b8b8563ffffffff1681811061138e5761138e613f66565b90506020028101906113a09190613f7c565b6020018c8c8663ffffffff1681811061126c5761126c613f66565b90508381146113fa5760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610ea7565b6040516398fae8e960e01b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906398fae8e990602401600060405180830381600087803b15801561145c57600080fd5b505af1158015611470573d6000803e3d6000fd5b5050505081600101915050611316565b5060005b818163ffffffff16101561150c5761150389898363ffffffff168181106114ad576114ad613f66565b90506020028101906114bf9190613f7c565b6114c99080613f9d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127e192505050565b50600101611484565b5050505061151a6001600755565b5050505050565b6000546001600160a01b0316331461154c576040516311a8a1bb60e31b815260040160405180910390fd5b61155581612ac6565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc9190613f23565b905090565b6000546001600160a01b0316331461160c576040516311a8a1bb60e31b815260040160405180910390fd5b476116178282612b2f565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161165291815260200190565b60405180910390a25050565b6000546001600160a01b03163314611689576040516311a8a1bb60e31b815260040160405180910390fd5b61169161242d565b60008181526009602052604081205490036116e65760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610ea7565b6000818152600960205260408082208290555182917ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73991a250565b6000546001600160a01b0316331461174c576040516311a8a1bb60e31b815260040160405180910390fd5b60405162461bcd60e51b815260206004820152600a6024820152691c1c9bda1a589a5d195960b21b6044820152606401610ea7565b6000546001600160a01b031633146117ac576040516311a8a1bb60e31b815260040160405180910390fd5b61155581612c4d565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118229190613ffb565b6118595760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610ea7565b611861612370565b6110f3612c8e565b611871612370565b60125460ff1661189457604051637022548360e11b815260040160405180910390fd5b438111156118b557604051636839359160e01b815260040160405180910390fd5b600f5460001981016118da576040516317d1c37960e31b815260040160405180910390fd5b604080516020810186905290810184905260608101839052600090608001604051602081830303815290604052805190602001209050818114611930576040516333dfe00560e21b815260040160405180910390fd5b6000858152600a602052604090819020805460ff19166001908117909155600f55517f2dc49dedbe4da61c874d43fd3b63b0ed21ba78b75c83feca2f810ae13ada0af4906119819087815260200190565b60405180910390a15050505050565b6000546001600160a01b031633146119bb576040516311a8a1bb60e31b815260040160405180910390fd5b6011548110156119de5760405163575ce9f760e01b815260040160405180910390fd5b6010548103611a0057604051630d3d523f60e11b815260040160405180910390fd5b60105460408051918252602082018390527fff74184d965d306545ebeb3283c4d7a39f453a9c0ea539db6437b33ceb9c5125910160405180910390a1601055565b6000546001600160a01b03163314611a6c576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b038116600081815260136020526040808220805460ff19166001179055517f2bf05609716bc4b090ad0e99b47b91881c7517771259c625df05db7e9d8c81819190a250565b6000546001600160a01b03163314611ae3576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611b01575060025415155b15611b1f576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603611b4d57604051634a2fb73f60e11b815260040160405180910390fd5b61155581612cd1565b6000546001600160a01b03163314611b81576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000908152600d602052604090205460ff16611bd45760405162461bcd60e51b815260206004820152600860248201526708585b1b1bddd95960c21b6044820152606401610ea7565b6001600160a01b0381166000818152600d6020526040808220805460ff19169055517f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9190a250565b6000546001600160a01b03163314611c48576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000908152600d602052604090205460ff1615611c9b5760405162461bcd60e51b8152602060048201526007602482015266185b1b1bddd95960ca1b6044820152606401610ea7565b6001600160a01b0381166000818152600d6020526040808220805460ff19166001179055517fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879190a250565b6001546001600160a01b03163314611d12576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442611d24919061401d565b11611d42576040516324e0285f60e21b815260040160405180910390fd5b6001546110f3906001600160a01b0316612d1f565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc49190613ffb565b611dfb5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610ea7565b60125460ff16611e1e57604051637022548360e11b815260040160405180910390fd5b6012805460ff191690556001600f5560405133907f714b2723706f07835c1a61e679dc639438acf1e1d0bbae60d17e5a246a754d6e90600090a2565b6000546001600160a01b03163314611e85576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b0390811690821603611ee35760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610ea7565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001611190565b6000546001600160a01b03163314611f5c576040516311a8a1bb60e31b815260040160405180910390fd5b60125460ff1615611f8057604051630e8a34ed60e41b815260040160405180910390fd5b6012805460ff191660011790556040517f46b91c03184b9c3d3422333019c7e56a3e8940f285463e754a526110287bd52190600090a1565b6000611fc382612d84565b92915050565b6000546001600160a01b03163314611ff4576040516311a8a1bb60e31b815260040160405180910390fd5b61155581612db0565b336000908152600d602052604081205460609060ff1661204e5760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610ea7565b61070842046000818152600e602052604081205490036121b75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ec9190613f23565b905080600e6000848152602001908152602001600020819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121889190613f23565b604051829084907f7ab06ac7a4d1b913d3302154561c33502bc3786196bf36757232034393d6143890600090a4505b604051630c132ab560e01b815263ffffffff871660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630c132ab5906024016020604051808303816000875af1158015612226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224a9190614030565b9050600061227c7f000000000000000000000000000000000000000000000000000000000000000033848b8b8b612e2e565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612316919061404d565b90925090508161232760018361401d565b847f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f876040516123579190614071565b60405180910390a4509099919850909650505050505050565b600354600160a01b900460ff16156110f35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610ea7565b6000826040516020016123d291815260200190565b60405160208183030381529060405290506123ed8183612e66565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507781833360405161242093929190614084565b60405180910390a1505050565b600354600160a01b900460ff166110f35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610ea7565b61248561242d565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546124e7906001600160a01b0316612d84565b6125265760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610ea7565b80516020146125615760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610ea7565b61155561256d826140c2565b612f3a565b6002600754036125c45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ea7565b6002600755565b600080604051630546f34b60e21b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063151bcd2c90602401602060405180830381865afa158015612633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265791906140ff565b6002811115612668576126686140e9565b146126a85760405162461bcd60e51b815260206004820152601060248201526f214c6561665374617475732e4e6f6e6560801b6044820152606401610ea7565b6126dc84846020806020026040519081016040528092919082602080028082843760009201919091525086915061307f9050565b90505b9392505050565b6000848152600b602052604090205460ff166127db57612705836133cd565b600061273b85846020806020026040519081016040528092919082602080028082843760009201919091525086915061307f9050565b90508381146127825760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610ea7565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a8906127d19086815260200190565b60405180910390a3505b50505050565b6000806127ee838261352d565b905063ffffffff7f00000000000000000000000000000000000000000000000000000000000000001661282662ffffff198316613551565b63ffffffff16146128685760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610ea7565b600061287962ffffff198316613566565b604051630b61f10360e41b8152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b61f103090602401600060405180830381600087803b1580156128de57600080fd5b505af11580156128f2573d6000803e3d6000fd5b5050505060017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006129449190613f10565b61294e919061401d565b5a116129855760405162461bcd60e51b8152600401610ea7906020808252600490820152632167617360e01b604082015260600190565b600061299662ffffff1984166135af565b6040805161010080825261012082019092529192507f0000000000000000000000000000000000000000000000000000000000000000916000908260208201818036833701905050905060006129f162ffffff1988166135c0565b612a0062ffffff1989166135d4565b612a0f62ffffff198a166135e9565b612a2c612a2162ffffff198c166135fe565b62ffffff191661362c565b604051602401612a3f9493929190614120565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050612a79858560008685613675565b604051919950925086907fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890612ab2908b908690614159565b60405180910390a250505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015612b7f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ea7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612bcc576040519150601f19603f3d011682016040523d82523d6000602084013e612bd1565b606091505b5050905080612c485760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ea7565b505050565b60145460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601455565b612c96612370565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124b53390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6000611fc37f000000000000000000000000000000000000000000000000000000000000000083613700565b6005548103612df35760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610ea7565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101611190565b6060868686868686604051602001612e4b96959493929190614174565b60405160208183030381529060405290509695505050505050565b8151602014612ea65760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610ea7565b6003546001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691633dbb202b911684612ee6856137c1565b6040518463ffffffff1660e01b8152600401612f04939291906141ce565b600060405180830381600087803b158015612f1e57600080fd5b505af1158015612f32573d6000803e3d6000fd5b505050505050565b60125460ff1615612f5e5760405163f8bc6d7d60e01b815260040160405180910390fd5b80612f9c5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610ea7565b60008181526009602052604090205415612fef5760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610ea7565b6000818152600a602052604090205460ff16156130445760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610ea7565b6000818152600960205260408082204390555182917f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc891a250565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806134105760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610ea7565b6000818152600a602052604090205460ff161561342a5750565b600081815260096020526040812054908190036134805760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610ea7565b60085461348d824361401d565b10156134db5760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610ea7565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161354864ffffffffff8516828461381f565b95945050505050565b6000611fc362ffffff1983166028600461385c565b60008061357c8360781c6001600160601b031690565b6001600160601b03169050600061359c8460181c6001600160601b031690565b6001600160601b03169091209392505050565b6000611fc36135bd8361388c565b90565b6000611fc362ffffff19831682600461385c565b6000611fc362ffffff1983166024600461385c565b6000611fc362ffffff1983166004602061389d565b6000611fc3604c61361c81601886901c6001600160601b031661401d565b62ffffff198516919060006139a8565b60606000806136448460181c6001600160601b031690565b6001600160601b0316905060405191508192506136648483602001613a24565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff81111561369b5761369b613c86565b6040519080825280601f01601f1916602001820160405280156136c5576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156136e6578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b038416146137445760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610ea7565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561378c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b09190614208565b6001600160a01b0316149392505050565b600081516020146138035760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610ea7565b611fc38280602001905181019061381a9190613f23565b613b17565b60008061382c8385613f10565b905060405181111561383c575060005b806000036138515762ffffff199150506126df565b613548858585613b2d565b6000613869826020614225565b61387490600861423e565b60ff1661388285858561389d565b901c949350505050565b6000611fc362ffffff198316602c60205b60008160ff166000036138b2575060006126df565b6138c58460181c6001600160601b031690565b6001600160601b03166138db60ff841685613f10565b1115613943576138f48460781c6001600160601b031690565b6139078560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610ea7565b60208260ff1611156139685760405163045df3f960e01b815260040160405180910390fd5b6008820260006139818660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b6000806139be8660781c6001600160601b031690565b6001600160601b031690506139d286613ba4565b846139dd8784613f10565b6139e79190613f10565b11156139fa5762ffffff19915050613a1c565b613a048582613f10565b9050613a188364ffffffffff16828661381f565b9150505b949350505050565b600062ffffff1980841603613a4c5760405163148d513360e21b815260040160405180910390fd5b613a5583613bdd565b15613a7357604051632ee0949160e11b815260040160405180910390fd5b6000613a888460181c6001600160601b031690565b6001600160601b031690506000613aa88560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115613ac95760206060fd5b8386858560045afa905080613af157604051632af1bd9b60e21b815260040160405180910390fd5b613b0c613afe8860d81c90565b64ffffffffff168786613b2d565b979650505050505050565b6000601454821115613b295760145491505b5090565b60006060601883856001600160601b03821682148015613b55575086816001600160601b0316145b613b8e5760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610ea7565b96831b90961790911b90941790931b9392505050565b6000613bb98260181c6001600160601b031690565b613bcc8360781c6001600160601b031690565b016001600160601b03169050919050565b6000613be98260d81c90565b64ffffffffff1664ffffffffff03613c0357506001919050565b6000613c0e83613ba4565b604051109392505050565b6001600160a01b038116811461155557600080fd5b600060208284031215613c4057600080fd5b81356126df81613c19565b60008060408385031215613c5e57600080fd5b50508035926020909101359150565b600060208284031215613c7f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613cad57600080fd5b813567ffffffffffffffff80821115613cc857613cc8613c86565b604051601f8301601f19908116603f01168101908282118183101715613cf057613cf0613c86565b81604052838152866020858801011115613d0957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215613d3b57600080fd5b813567ffffffffffffffff811115613d5257600080fd5b613a1c84828501613c9c565b60008060008060006104608688031215613d7757600080fd5b853567ffffffffffffffff80821115613d8f57600080fd5b818801915088601f830112613da357600080fd5b813581811115613db257600080fd5b8960208260051b8501011115613dc757600080fd5b602092830197509550508601359250610440860187811115613de857600080fd5b94979396509194604001933592915050565b600080600060608486031215613e0f57600080fd5b505081359360208301359350604090920135919050565b63ffffffff8116811461155557600080fd5b600080600060608486031215613e4d57600080fd5b8335613e5881613e26565b925060208401359150604084013567ffffffffffffffff811115613e7b57600080fd5b613e8786828701613c9c565b9150509250925092565b60005b83811015613eac578181015183820152602001613e94565b50506000910152565b60008151808452613ecd816020860160208601613e91565b601f01601f19169290920160200192915050565b8281526040602082015260006126dc6040830184613eb5565b634e487b7160e01b600052601160045260246000fd5b80820180821115611fc357611fc3613efa565b600060208284031215613f3557600080fd5b5051919050565b604081526000613f4f6040830185613eb5565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e19833603018112613f9357600080fd5b9190910192915050565b6000808335601e19843603018112613fb457600080fd5b83018035915067ffffffffffffffff821115613fcf57600080fd5b602001915036819003821315613fe457600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561400d57600080fd5b815180151581146126df57600080fd5b81810381811115611fc357611fc3613efa565b60006020828403121561404257600080fd5b81516126df81613e26565b6000806040838503121561406057600080fd5b505080516020909101519092909150565b6020815260006126df6020830184613eb5565b6060815260006140976060830186613eb5565b82810360208401526140a98186613eb5565b91505060018060a01b0383166040830152949350505050565b805160208083015191908110156140e3576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561411157600080fd5b8151600381106126df57600080fd5b600063ffffffff80871683528086166020840152508360408301526080606083015261414f6080830184613eb5565b9695505050505050565b82151581526040602082015260006126dc6040830184613eb5565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516141bc81604c850160208701613e91565b91909101604c01979650505050505050565b6001600160a01b03841681526060602082018190526000906141f290830185613eb5565b905063ffffffff83166040830152949350505050565b60006020828403121561421a57600080fd5b81516126df81613c19565b60ff8281168282160390811115611fc357611fc3613efa565b60ff818116838216029081169081811461425a5761425a613efa565b509291505056fea264697066735822122062e3690046b6a10c8bf370abd64d334083a37d2a1ab942c18d18d15bd7477cc664736f6c63430008110033", + "deployedBytecode": "0x6080604052600436106103c75760003560e01c80638456cb59116101f2578063cbfa20211161010d578063d3c805b7116100a0578063db1b76591161006f578063db1b765914610bd4578063e0fed01014610bf4578063f4b6e41014610c14578063fa31de0114610c2a57600080fd5b8063d3c805b714610b41578063d69f9d6114610b56578063d7d317b314610b8a578063d88beda214610ba057600080fd5b8063d1851c92116100dc578063d1851c9214610acf578063d232c22014610aed578063d2a3cc7114610b0c578063d3c54fe514610b2c57600080fd5b8063cbfa202114610a6d578063cc39428314610a82578063ceb3454e14610aa2578063d1745e4f14610ab857600080fd5b8063a792c29b11610185578063b1f8100d11610154578063b1f8100d146109f8578063b2f8764314610a18578063b697f53114610a38578063c5b350df14610a5857600080fd5b8063a792c29b14610982578063a941f3f3146109a2578063ad9c0c2e146109c2578063b03cd418146109d857600080fd5b806398c9f2b9116101c157806398c9f2b9146108de5780639d3117c71461090e5780639fa92f9d1461093b578063a01892a51461094e57600080fd5b80638456cb59146108585780638d3638f41461086d5780638da5cb5b146108a05780638e02f759146108be57600080fd5b806351cc57cc116102e257806360caf7a0116102755780636a42b8f8116102445780636a42b8f8146107ed5780636b04a93314610803578063715018a6146108235780637850b0201461083857600080fd5b806360caf7a01461076e5780636159ada11461078857806365eaf11b146107b857806368742da6146107cd57600080fd5b80635bd11efc116102b15780635bd11efc146106ce5780635c975abb146106ee5780635d3087611461070d5780635f61e3ec1461072257600080fd5b806351cc57cc1461062757806352a9674b14610654578063572386ca14610688578063579c1618146106b857600080fd5b80632bb1ae7c1161035a5780634a2db1da116103295780634a2db1da1461058e5780634ff746f6146105be578063508a109b146105de5780635190bc53146105fe57600080fd5b80632bb1ae7c14610511578063301f07c3146105245780633cf52ffb146105645780633f4ba83a1461057957600080fd5b80631eeaabea116103965780631eeaabea1461048757806320f62eda146104a757806325e3beda146104bd578063263ef354146104f157600080fd5b8063047dbeb8146103d357806309d632d3146103fc578063111c18371461041e578063141684161461043e57600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103e960145481565b6040519081526020015b60405180910390f35b34801561040857600080fd5b5061041c610417366004613c2e565b610c58565b005b34801561042a57600080fd5b5061041c610439366004613c4b565b610ccc565b34801561044a57600080fd5b506104727f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103f3565b34801561049357600080fd5b5061041c6104a2366004613c6d565b610e40565b3480156104b357600080fd5b506103e960105481565b3480156104c957600080fd5b506103e97f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fd57600080fd5b5061041c61050c366004613c6d565b610eea565b61041c61051f366004613d29565b610f78565b34801561053057600080fd5b5061055461053f366004613c6d565b600a6020526000908152604090205460ff1681565b60405190151581526020016103f3565b34801561057057600080fd5b506002546103e9565b34801561058557600080fd5b5061041c6110b8565b34801561059a57600080fd5b506105546105a9366004613c2e565b60136020526000908152604090205460ff1681565b3480156105ca57600080fd5b5061041c6105d9366004613d29565b6110f5565b3480156105ea57600080fd5b5061041c6105f9366004613d5e565b61119b565b34801561060a57600080fd5b50610554610619366004613c2e565b6001600160a01b0316301490565b34801561063357600080fd5b506103e9610642366004613c6d565b600e6020526000908152604090205481565b34801561066057600080fd5b506104727f000000000000000000000000000000000000000000000000000000000000000081565b34801561069457600080fd5b506105546106a3366004613c6d565b600c6020526000908152604090205460ff1681565b3480156106c457600080fd5b506103e960055481565b3480156106da57600080fd5b5061041c6106e9366004613c2e565b611521565b3480156106fa57600080fd5b50600354600160a01b900460ff16610554565b34801561071957600080fd5b506103e9600181565b34801561072e57600080fd5b506107567f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103f3565b34801561077a57600080fd5b506012546105549060ff1681565b34801561079457600080fd5b506105546107a3366004613c2e565b600d6020526000908152604090205460ff1681565b3480156107c457600080fd5b506103e9611558565b3480156107d957600080fd5b5061041c6107e8366004613c2e565b6115e1565b3480156107f957600080fd5b5062093a806103e9565b34801561080f57600080fd5b5061041c61081e366004613c6d565b61165e565b34801561082f57600080fd5b5061041c611721565b34801561084457600080fd5b5061041c610853366004613c6d565b611781565b34801561086457600080fd5b5061041c6117b5565b34801561087957600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610472565b3480156108ac57600080fd5b506000546001600160a01b0316610756565b3480156108ca57600080fd5b5061041c6108d9366004613dfa565b611869565b3480156108ea57600080fd5b506105546108f9366004613c6d565b600b6020526000908152604090205460ff1681565b34801561091a57600080fd5b506103e9610929366004613c6d565b60096020526000908152604090205481565b34801561094757600080fd5b5030610756565b34801561095a57600080fd5b506107567f000000000000000000000000000000000000000000000000000000000000000081565b34801561098e57600080fd5b50600454610756906001600160a01b031681565b3480156109ae57600080fd5b5061041c6109bd366004613c6d565b611990565b3480156109ce57600080fd5b506103e960085481565b3480156109e457600080fd5b5061041c6109f3366004613c2e565b611a41565b348015610a0457600080fd5b5061041c610a13366004613c2e565b611ab8565b348015610a2457600080fd5b5061041c610a33366004613c2e565b611b56565b348015610a4457600080fd5b5061041c610a53366004613c2e565b611c1d565b348015610a6457600080fd5b5061041c611ce7565b348015610a7957600080fd5b5061041c611d57565b348015610a8e57600080fd5b50600354610756906001600160a01b031681565b348015610aae57600080fd5b506103e9600f5481565b348015610ac457600080fd5b5061070842046103e9565b348015610adb57600080fd5b506001546001600160a01b0316610756565b348015610af957600080fd5b506000546001600160a01b031615610554565b348015610b1857600080fd5b5061041c610b27366004613c2e565b611e5a565b348015610b3857600080fd5b5061041c611f31565b348015610b4d57600080fd5b506107086103e9565b348015610b6257600080fd5b506107567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9657600080fd5b506103e960065481565b348015610bac57600080fd5b506103e97f000000000000000000000000000000000000000000000000000000000000000081565b348015610be057600080fd5b50610554610bef366004613c2e565b611fb8565b348015610c0057600080fd5b5061041c610c0f366004613c6d565b611fc9565b348015610c2057600080fd5b506103e960115481565b348015610c3657600080fd5b50610c4a610c45366004613e38565b611ffd565b6040516103f3929190613ee1565b6000546001600160a01b03163314610c83576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b038116600081815260136020526040808220805460ff19169055517fbab6b194452fd4fa50e0ca09bf0f89976da30a2b92fdf91372ad1a176d81e3289190a250565b610cd4612370565b3360009081526013602052604090205460ff16610d045760405163dce46cfd60e01b815260040160405180910390fd5b60125460ff16610d2757604051637022548360e11b815260040160405180910390fd5b600f54600114610d4a57604051632bf9cc6b60e11b815260040160405180910390fd5b60008281526009602052604090205415610d97576000828152600960205260408082208290555183917f25baf79d6178f15bc11aefa9950ab45ad2e15f1fb6d8aa3b4f7889a6b2e2f70491a25b600060105443610da79190613f10565b60408051602081018690529081018490526060810182905290915060800160408051601f19818403018152908290528051602091820120600f5563ffffffff7f00000000000000000000000000000000000000000000000000000000000000001682528291849186917f7008dd9e43d32c464bcffa3c51a95b0d1038885b09f490062dee0fee59054e9c910160405180910390a4505050565b6000546001600160a01b03163314610e6b576040516311a8a1bb60e31b815260040160405180910390fd5b6008548103610eb05760405162461bcd60e51b815260206004820152600c60248201526b2164656c6179426c6f636b7360a01b60448201526064015b60405180910390fd5b60405133815281907f8bd16320f3b60336ed5fd2a770eb7453e7e71cfef4462addffd7ae9dfe201c8e9060200160405180910390a2600855565b6000546001600160a01b03163314610f15576040516311a8a1bb60e31b815260040160405180910390fd5b6011548103610f375760405163545924bf60e11b815260040160405180910390fd5b60115460408051918252602082018390527fdfad87ee418f8b636836b030634c8040055c9a5f641899df5a5d1d3c554fee47910160405180910390a1601155565b610f80612370565b43600554600654610f919190613f10565b1115610fb0576040516346cf2af160e11b815260040160405180910390fd5b4360068190555060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b9190613f23565b6000818152600c602052604090205490915060ff16156110915760405162461bcd60e51b81526020600482015260116024820152701c9bdbdd08185b1c9958591e481cd95b9d607a1b6044820152606401610ea7565b6000818152600c60205260409020805460ff191660011790556110b481836123bd565b5050565b6000546001600160a01b031633146110e3576040516311a8a1bb60e31b815260040160405180910390fd5b6110eb61242d565b6110f361247d565b565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111565760405162461bcd60e51b8152600401610ea79060208082526004908201526310a0a6a160e11b604082015260600190565b61115f816124d2565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced8133604051611190929190613f3c565b60405180910390a150565b6111a3612370565b6111ab612572565b836111e25760405162461bcd60e51b81526020600482015260076024820152662170726f6f667360c81b6044820152606401610ea7565b6000858560008181106111f7576111f7613f66565b90506020028101906112099190613f7c565b6112139080613f9d565b604051611221929190613feb565b604051809103902090506000611288828888600081811061124457611244613f66565b90506020028101906112569190613f7c565b6020018989600081811061126c5761126c613f66565b905060200281019061127e9190613f7c565b61042001356125cb565b9050611296818686866126e6565b6040516398fae8e960e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906398fae8e990602401600060405180830381600087803b1580156112f857600080fd5b505af115801561130c573d6000803e3d6000fd5b5088925060019150505b818163ffffffff1610156114805788888263ffffffff1681811061133c5761133c613f66565b905060200281019061134e9190613f7c565b6113589080613f9d565b604051611366929190613feb565b6040518091039020935060006113bb858b8b8563ffffffff1681811061138e5761138e613f66565b90506020028101906113a09190613f7c565b6020018c8c8663ffffffff1681811061126c5761126c613f66565b90508381146113fa5760405162461bcd60e51b815260206004820152600b60248201526a085cda185c9959149bdbdd60aa1b6044820152606401610ea7565b6040516398fae8e960e01b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906398fae8e990602401600060405180830381600087803b15801561145c57600080fd5b505af1158015611470573d6000803e3d6000fd5b5050505081600101915050611316565b5060005b818163ffffffff16101561150c5761150389898363ffffffff168181106114ad576114ad613f66565b90506020028101906114bf9190613f7c565b6114c99080613f9d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127e192505050565b50600101611484565b5050505061151a6001600755565b5050505050565b6000546001600160a01b0316331461154c576040516311a8a1bb60e31b815260040160405180910390fd5b61155581612ac6565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dc9190613f23565b905090565b6000546001600160a01b0316331461160c576040516311a8a1bb60e31b815260040160405180910390fd5b476116178282612b2f565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d8260405161165291815260200190565b60405180910390a25050565b6000546001600160a01b03163314611689576040516311a8a1bb60e31b815260040160405180910390fd5b61169161242d565b60008181526009602052604081205490036116e65760405162461bcd60e51b8152602060048201526015602482015274616767726567617465526f6f74202165786973747360581b6044820152606401610ea7565b6000818152600960205260408082208290555182917ff51534ecf10a58db36ce4f5180f59deddf3b3eb7c5e7454e602c2f80a40cc73991a250565b6000546001600160a01b0316331461174c576040516311a8a1bb60e31b815260040160405180910390fd5b60405162461bcd60e51b815260206004820152600a6024820152691c1c9bda1a589a5d195960b21b6044820152606401610ea7565b6000546001600160a01b031633146117ac576040516311a8a1bb60e31b815260040160405180910390fd5b61155581612c4d565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa1580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118229190613ffb565b6118595760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610ea7565b611861612370565b6110f3612c8e565b611871612370565b60125460ff1661189457604051637022548360e11b815260040160405180910390fd5b438111156118b557604051636839359160e01b815260040160405180910390fd5b600f5460001981016118da576040516317d1c37960e31b815260040160405180910390fd5b604080516020810186905290810184905260608101839052600090608001604051602081830303815290604052805190602001209050818114611930576040516333dfe00560e21b815260040160405180910390fd5b6000858152600a602052604090819020805460ff19166001908117909155600f55517f2dc49dedbe4da61c874d43fd3b63b0ed21ba78b75c83feca2f810ae13ada0af4906119819087815260200190565b60405180910390a15050505050565b6000546001600160a01b031633146119bb576040516311a8a1bb60e31b815260040160405180910390fd5b6011548110156119de5760405163575ce9f760e01b815260040160405180910390fd5b6010548103611a0057604051630d3d523f60e11b815260040160405180910390fd5b60105460408051918252602082018390527fff74184d965d306545ebeb3283c4d7a39f453a9c0ea539db6437b33ceb9c5125910160405180910390a1601055565b6000546001600160a01b03163314611a6c576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b038116600081815260136020526040808220805460ff19166001179055517f2bf05609716bc4b090ad0e99b47b91881c7517771259c625df05db7e9d8c81819190a250565b6000546001600160a01b03163314611ae3576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611b01575060025415155b15611b1f576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603611b4d57604051634a2fb73f60e11b815260040160405180910390fd5b61155581612cd1565b6000546001600160a01b03163314611b81576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000908152600d602052604090205460ff16611bd45760405162461bcd60e51b815260206004820152600860248201526708585b1b1bddd95960c21b6044820152606401610ea7565b6001600160a01b0381166000818152600d6020526040808220805460ff19169055517f384859c5ef5fafac31e8bc92ce7fb48b1f2c74c4dd5e212eb84ec202fa5d9fad9190a250565b6000546001600160a01b03163314611c48576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0381166000908152600d602052604090205460ff1615611c9b5760405162461bcd60e51b8152602060048201526007602482015266185b1b1bddd95960ca1b6044820152606401610ea7565b6001600160a01b0381166000818152600d6020526040808220805460ff19166001179055517fd65eca5d561d3a4568c87b9b13ced4ab52a69edadfdfdb22d76bc595f36d7d879190a250565b6001546001600160a01b03163314611d12576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442611d24919061401d565b11611d42576040516324e0285f60e21b815260040160405180910390fd5b6001546110f3906001600160a01b0316612d1f565b600480546040516384785ecd60e01b815233928101929092526001600160a01b0316906384785ecd90602401602060405180830381865afa158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc49190613ffb565b611dfb5760405162461bcd60e51b815260206004820152600860248201526710bbb0ba31b432b960c11b6044820152606401610ea7565b60125460ff16611e1e57604051637022548360e11b815260040160405180910390fd5b6012805460ff191690556001600f5560405133907f714b2723706f07835c1a61e679dc639438acf1e1d0bbae60d17e5a246a754d6e90600090a2565b6000546001600160a01b03163314611e85576040516311a8a1bb60e31b815260040160405180910390fd5b6004546001600160a01b0390811690821603611ee35760405162461bcd60e51b815260206004820152601760248201527f616c72656164792077617463686572206d616e616765720000000000000000006044820152606401610ea7565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527fc16d059e43d7f8e29ccb4e001a2f249d3c59e274925d6a6bc3912943441d9f6c90602001611190565b6000546001600160a01b03163314611f5c576040516311a8a1bb60e31b815260040160405180910390fd5b60125460ff1615611f8057604051630e8a34ed60e41b815260040160405180910390fd5b6012805460ff191660011790556040517f46b91c03184b9c3d3422333019c7e56a3e8940f285463e754a526110287bd52190600090a1565b6000611fc382612d84565b92915050565b6000546001600160a01b03163314611ff4576040516311a8a1bb60e31b815260040160405180910390fd5b61155581612db0565b336000908152600d602052604081205460609060ff1661204e5760405162461bcd60e51b815260206004820152600c60248201526b08585b1b1bdddb1a5cdd195960a21b6044820152606401610ea7565b61070842046000818152600e602052604081205490036121b75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ebf0c7176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ec9190613f23565b905080600e6000848152602001908152602001600020819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166306661abd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121889190613f23565b604051829084907f7ab06ac7a4d1b913d3302154561c33502bc3786196bf36757232034393d6143890600090a4505b604051630c132ab560e01b815263ffffffff871660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630c132ab5906024016020604051808303816000875af1158015612226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224a9190614030565b9050600061227c7f000000000000000000000000000000000000000000000000000000000000000033848b8b8b612e2e565b80516020820120604051632d287e4360e01b8152600481018290529192509060009081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632d287e439060240160408051808303816000875af11580156122f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612316919061404d565b90925090508161232760018361401d565b847f40f08ee347fc927ae45902edc87debb024aab1a311943731968607f603f2152f876040516123579190614071565b60405180910390a4509099919850909650505050505050565b600354600160a01b900460ff16156110f35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610ea7565b6000826040516020016123d291815260200190565b60405160208183030381529060405290506123ed8183612e66565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e935507781833360405161242093929190614084565b60405180910390a1505050565b600354600160a01b900460ff166110f35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610ea7565b61248561242d565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6003546124e7906001600160a01b0316612d84565b6125265760405162461bcd60e51b815260206004820152601060248201526f10b6b4b93937b921b7b73732b1ba37b960811b6044820152606401610ea7565b80516020146125615760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610ea7565b61155561256d826140c2565b612f3a565b6002600754036125c45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ea7565b6002600755565b600080604051630546f34b60e21b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063151bcd2c90602401602060405180830381865afa158015612633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265791906140ff565b6002811115612668576126686140e9565b146126a85760405162461bcd60e51b815260206004820152601060248201526f214c6561665374617475732e4e6f6e6560801b6044820152606401610ea7565b6126dc84846020806020026040519081016040528092919082602080028082843760009201919091525086915061307f9050565b90505b9392505050565b6000848152600b602052604090205460ff166127db57612705836133cd565b600061273b85846020806020026040519081016040528092919082602080028082843760009201919091525086915061307f9050565b90508381146127825760405162461bcd60e51b81526020600482015260136024820152721a5b9d985b1a59081a5b989bdd5b99149bdbdd606a1b6044820152606401610ea7565b6000858152600b602052604090819020805460ff1916600117905551849086907f7ec1ea51fe3db53e55ed9d922854bc2156f467ff2f87d74e2086dae2c84a88a8906127d19086815260200190565b60405180910390a3505b50505050565b6000806127ee838261352d565b905063ffffffff7f00000000000000000000000000000000000000000000000000000000000000001661282662ffffff198316613551565b63ffffffff16146128685760405162461bcd60e51b815260206004820152600c60248201526b10b232b9ba34b730ba34b7b760a11b6044820152606401610ea7565b600061287962ffffff198316613566565b604051630b61f10360e41b8152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b61f103090602401600060405180830381600087803b1580156128de57600080fd5b505af11580156128f2573d6000803e3d6000fd5b5050505060017f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006129449190613f10565b61294e919061401d565b5a116129855760405162461bcd60e51b8152600401610ea7906020808252600490820152632167617360e01b604082015260600190565b600061299662ffffff1984166135af565b6040805161010080825261012082019092529192507f0000000000000000000000000000000000000000000000000000000000000000916000908260208201818036833701905050905060006129f162ffffff1988166135c0565b612a0062ffffff1989166135d4565b612a0f62ffffff198a166135e9565b612a2c612a2162ffffff198c166135fe565b62ffffff191661362c565b604051602401612a3f9493929190614120565b60408051601f198184030181529190526020810180516001600160e01b031663ab2dc3f560e01b1790529050612a79858560008685613675565b604051919950925086907fd42de95a9b26f1be134c8ecce389dc4fcfa18753d01661b7b361233569e8fe4890612ab2908b908690614159565b60405180910390a250505050505050919050565b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015612b7f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610ea7565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612bcc576040519150601f19603f3d011682016040523d82523d6000602084013e612bd1565b606091505b5050905080612c485760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610ea7565b505050565b60145460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1601455565b612c96612370565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124b53390565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6000611fc37f000000000000000000000000000000000000000000000000000000000000000083613700565b6005548103612df35760405162461bcd60e51b815260206004820152600f60248201526e085b995dc81c985d19481b1a5b5a5d608a1b6044820152606401610ea7565b600581905560408051338152602081018390527f8e7fa5e406cb856aab05575e45ea011c6748376cc1b5229e3d67b92986406a159101611190565b6060868686868686604051602001612e4b96959493929190614174565b60405160208183030381529060405290509695505050505050565b8151602014612ea65760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610ea7565b6003546001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691633dbb202b911684612ee6856137c1565b6040518463ffffffff1660e01b8152600401612f04939291906141ce565b600060405180830381600087803b158015612f1e57600080fd5b505af1158015612f32573d6000803e3d6000fd5b505050505050565b60125460ff1615612f5e5760405163f8bc6d7d60e01b815260040160405180910390fd5b80612f9c5760405162461bcd60e51b815260206004820152600e60248201526d6e657720726f6f7420656d70747960901b6044820152606401610ea7565b60008181526009602052604090205415612fef5760405162461bcd60e51b8152602060048201526014602482015273726f6f7420616c72656164792070656e64696e6760601b6044820152606401610ea7565b6000818152600a602052604090205460ff16156130445760405162461bcd60e51b81526020600482015260136024820152723937b7ba1030b63932b0b23c90383937bb32b760691b6044820152606401610ea7565b6000818152600960205260408082204390555182917f84ef18531155afdb0e64ff905d67044ae3aac63a6fba4661cfd9c4c14f289bc891a250565b6020600582811b8216948552835194820394909452604060008181206002851615871b808503919091528386015190528181206004851615871b808503919091528286015190528181206008851615871b80850391909152606086015190528181206010851615871b8085039190915260808087015190915282822084861615881b8086039190915260a0870151905282822083861615881b8086039190915260c0870151905282822090851615871b8085039190915260e0860151905281812061010080861615881b80860392909252860151905281812061020080861615881b80860392909252610120870151909152828220610400861615881b808603919091526101408701519052828220610800861615881b808603919091526101608701519052828220611000861615881b808603919091526101808701519052828220612000861615881b808603919091526101a08701519052828220614000861615881b808603919091526101c08701519052828220618000861615881b808603919091526101e0870151905282822062010000861615881b8086039190915290860151905281812062020000851615871b80850391909152610220860151905281812062040000851615871b80850391909152610240860151905281812062080000851615871b80850391909152610260860151905281812062100000851615871b80850391909152610280860151905281812062200000851615871b808503919091526102a0860151905281812062400000851615871b808503919091526102c0860151905281812062800000851615871b808503919091526102e086015190528181206301000000851615871b8085039190915261030086015190528181206302000000851615871b8085039190915261032086015190528181206304000000851615871b8085039190915261034086015190528181206308000000851615871b8085039190915261036086015190528181206310000000851615871b8085039190915261038086015190528181206320000000851615871b808503919091526103a086015190528181206340000000851615871b808503919091526103c0860151905281812063800000009094161590951b91829003929092526103e090920151909152902090565b806134105760405162461bcd60e51b8152602060048201526013602482015272616767726567617465526f6f7420656d70747960681b6044820152606401610ea7565b6000818152600a602052604090205460ff161561342a5750565b600081815260096020526040812054908190036134805760405162461bcd60e51b81526020600482015260146024820152731859d9dc9959d85d19549bdbdd0808595e1a5cdd60621b6044820152606401610ea7565b60085461348d824361401d565b10156134db5760405162461bcd60e51b815260206004820152601760248201527f616767726567617465526f6f74202176657269666965640000000000000000006044820152606401610ea7565b6000828152600a6020526040808220805460ff191660011790555183917f36b314aba9f663b4d3ef3288ae489341cc5e6a2725a05fa2b72df7a27e03f42a91a250600090815260096020526040812055565b81516000906020840161354864ffffffffff8516828461381f565b95945050505050565b6000611fc362ffffff1983166028600461385c565b60008061357c8360781c6001600160601b031690565b6001600160601b03169050600061359c8460181c6001600160601b031690565b6001600160601b03169091209392505050565b6000611fc36135bd8361388c565b90565b6000611fc362ffffff19831682600461385c565b6000611fc362ffffff1983166024600461385c565b6000611fc362ffffff1983166004602061389d565b6000611fc3604c61361c81601886901c6001600160601b031661401d565b62ffffff198516919060006139a8565b60606000806136448460181c6001600160601b031690565b6001600160601b0316905060405191508192506136648483602001613a24565b508181016020016040529052919050565b6000606060008060008661ffff1667ffffffffffffffff81111561369b5761369b613c86565b6040519080825280601f01601f1916602001820160405280156136c5576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156136e6578692505b828152826000602083013e90999098509650505050505050565b6000336001600160a01b038416146137445760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610ea7565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561378c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b09190614208565b6001600160a01b0316149392505050565b600081516020146138035760405162461bcd60e51b815260206004820152600c60248201526b042c8c2e8c240d8cadccee8d60a31b6044820152606401610ea7565b611fc38280602001905181019061381a9190613f23565b613b17565b60008061382c8385613f10565b905060405181111561383c575060005b806000036138515762ffffff199150506126df565b613548858585613b2d565b6000613869826020614225565b61387490600861423e565b60ff1661388285858561389d565b901c949350505050565b6000611fc362ffffff198316602c60205b60008160ff166000036138b2575060006126df565b6138c58460181c6001600160601b031690565b6001600160601b03166138db60ff841685613f10565b1115613943576138f48460781c6001600160601b031690565b6139078560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610ea7565b60208260ff1611156139685760405163045df3f960e01b815260040160405180910390fd5b6008820260006139818660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b6000806139be8660781c6001600160601b031690565b6001600160601b031690506139d286613ba4565b846139dd8784613f10565b6139e79190613f10565b11156139fa5762ffffff19915050613a1c565b613a048582613f10565b9050613a188364ffffffffff16828661381f565b9150505b949350505050565b600062ffffff1980841603613a4c5760405163148d513360e21b815260040160405180910390fd5b613a5583613bdd565b15613a7357604051632ee0949160e11b815260040160405180910390fd5b6000613a888460181c6001600160601b031690565b6001600160601b031690506000613aa88560781c6001600160601b031690565b6001600160601b03169050600080604051915085821115613ac95760206060fd5b8386858560045afa905080613af157604051632af1bd9b60e21b815260040160405180910390fd5b613b0c613afe8860d81c90565b64ffffffffff168786613b2d565b979650505050505050565b6000601454821115613b295760145491505b5090565b60006060601883856001600160601b03821682148015613b55575086816001600160601b0316145b613b8e5760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610ea7565b96831b90961790911b90941790931b9392505050565b6000613bb98260181c6001600160601b031690565b613bcc8360781c6001600160601b031690565b016001600160601b03169050919050565b6000613be98260d81c90565b64ffffffffff1664ffffffffff03613c0357506001919050565b6000613c0e83613ba4565b604051109392505050565b6001600160a01b038116811461155557600080fd5b600060208284031215613c4057600080fd5b81356126df81613c19565b60008060408385031215613c5e57600080fd5b50508035926020909101359150565b600060208284031215613c7f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613cad57600080fd5b813567ffffffffffffffff80821115613cc857613cc8613c86565b604051601f8301601f19908116603f01168101908282118183101715613cf057613cf0613c86565b81604052838152866020858801011115613d0957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215613d3b57600080fd5b813567ffffffffffffffff811115613d5257600080fd5b613a1c84828501613c9c565b60008060008060006104608688031215613d7757600080fd5b853567ffffffffffffffff80821115613d8f57600080fd5b818801915088601f830112613da357600080fd5b813581811115613db257600080fd5b8960208260051b8501011115613dc757600080fd5b602092830197509550508601359250610440860187811115613de857600080fd5b94979396509194604001933592915050565b600080600060608486031215613e0f57600080fd5b505081359360208301359350604090920135919050565b63ffffffff8116811461155557600080fd5b600080600060608486031215613e4d57600080fd5b8335613e5881613e26565b925060208401359150604084013567ffffffffffffffff811115613e7b57600080fd5b613e8786828701613c9c565b9150509250925092565b60005b83811015613eac578181015183820152602001613e94565b50506000910152565b60008151808452613ecd816020860160208601613e91565b601f01601f19169290920160200192915050565b8281526040602082015260006126dc6040830184613eb5565b634e487b7160e01b600052601160045260246000fd5b80820180821115611fc357611fc3613efa565b600060208284031215613f3557600080fd5b5051919050565b604081526000613f4f6040830185613eb5565b905060018060a01b03831660208301529392505050565b634e487b7160e01b600052603260045260246000fd5b6000823561043e19833603018112613f9357600080fd5b9190910192915050565b6000808335601e19843603018112613fb457600080fd5b83018035915067ffffffffffffffff821115613fcf57600080fd5b602001915036819003821315613fe457600080fd5b9250929050565b8183823760009101908152919050565b60006020828403121561400d57600080fd5b815180151581146126df57600080fd5b81810381811115611fc357611fc3613efa565b60006020828403121561404257600080fd5b81516126df81613e26565b6000806040838503121561406057600080fd5b505080516020909101519092909150565b6020815260006126df6020830184613eb5565b6060815260006140976060830186613eb5565b82810360208401526140a98186613eb5565b91505060018060a01b0383166040830152949350505050565b805160208083015191908110156140e3576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561411157600080fd5b8151600381106126df57600080fd5b600063ffffffff80871683528086166020840152508360408301526080606083015261414f6080830184613eb5565b9695505050505050565b82151581526040602082015260006126dc6040830184613eb5565b600063ffffffff60e01b808960e01b168352876004840152808760e01b166024840152808660e01b1660288401525083602c83015282516141bc81604c850160208701613e91565b91909101604c01979650505050505050565b6001600160a01b03841681526060602082018190526000906141f290830185613eb5565b905063ffffffff83166040830152949350505050565b60006020828403121561421a57600080fd5b81516126df81613c19565b60ff8281168282160390811115611fc357611fc3613efa565b60ff818116838216029081169081811461425a5761425a613efa565b509291505056fea264697066735822122062e3690046b6a10c8bf370abd64d334083a37d2a1ab942c18d18d15bd7477cc664736f6c63430008110033", + "devdoc": { + "kind": "dev", + "methods": { + "activateSlowMode()": { + "details": "Sets the proposed aggregate root hash to FINALIZED_HASH, invalidating it." + }, + "addProposer(address)": { + "details": "Only allowlisted proposers can call `proposeAggregateRoot`." + }, + "addSender(address)": { + "details": "Only allowlisted routers (senders) can call `dispatch`.", + "params": { + "_sender": "Sender to whitelist" + } + }, + "dispatch(uint32,bytes32,bytes)": { + "details": "The root of this tree will eventually be dispatched to mainnet via `send`. On mainnet (the \"hub\"), it will be combined into a single aggregate root by RootManager (along with outbound roots from other chains). This aggregate root will be redistributed to all destination chains.This function is also in charge of saving the snapshot root when needed. If the message being added to the tree is the first of the current period this means the last snapshot finished and its root must be saved. The saving happens before adding the new message to the tree. NOTE: okay to leave dispatch operational when paused as pause is designed for crosschain interactions", + "params": { + "_destinationDomain": "Domain message is intended for", + "_messageBody": "Message contents", + "_recipientAddress": "Address for message recipient" + } + }, + "finalize(bytes32,uint256,uint256)": { + "details": "Finalized roots won't be monitored by off-chain agents as they are deemed valid.", + "params": { + "_endOfDispute": "The block in which the dispute period for proposedAggregateRootHash concludes", + "_proposedAggregateRoot": "The aggregate root currently proposed" + } + }, + "getLastCompletedSnapshotId()": { + "details": "The value is calculated through an internal function to reuse code and save gas", + "returns": { + "_lastCompletedSnapshotId": "The last completed snapshot id" + } + }, + "getSnapshotDuration()": { + "returns": { + "_snapshotDuration": "The duration of the snapshot" + } + }, + "home()": { + "details": "The local inbox contract is a SpokeConnector with AMBs, and a Home contract with nomad", + "returns": { + "_0": "The local inbox contract" + } + }, + "isReplica(address)": { + "returns": { + "_0": "True if _potentialReplica is an enrolled Replica" + } + }, + "paused()": { + "details": "Returns true if the contract is paused, and false otherwise." + }, + "processMessage(bytes)": { + "details": "This is called by AMBs to process messages originating from mirror connector" + }, + "proposeAggregateRoot(bytes32,uint256)": { + "details": "_rootTimestamp is required for off-chain agents to be able to know which root they should fetch from the root manager contract in order to compare it with the one being proposed. The off-chain agents should also ensure the proposed root is not an old one.", + "params": { + "_aggregateRoot": "The aggregate root to propose.", + "_rootTimestamp": "Block.timestamp at which the root was finalized in the root manager contract." + } + }, + "proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)": { + "details": "Currently, ALL messages in a given batch must path to the same shared inboundRoot, meaning they must all share an origin. See open TODO below for a potential solution to enable multi-origin batches.Intended to be called by the relayer at specific intervals during runtime.Will record a calculated root as having been proven if we've already proven that it was included in the aggregateRoot.", + "params": { + "_aggregateIndex": "Index of the inbound root in the aggregator's merkle tree in the hub.", + "_aggregatePath": "Merkle path of inclusion for the inbound root.", + "_aggregateRoot": "The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.", + "_proofs": "Batch of Proofs containing messages for proving/processing." + } + }, + "removePendingAggregateRoot(bytes32)": { + "details": "This method is required for handling fraud cases in the current construction. Specifically, this will protect against a fraudulent aggregate root getting transported, not fraudulent roots that constitute a given aggregate root (i.e. can protect against fraudulent hub -> spoke transport, not spoke -> hub transport).", + "params": { + "_fraudulentRoot": "Target fraudulent root that should be erased from the `pendingAggregateRoots` mapping." + } + }, + "removeProposer(address)": { + "details": "Only allowlisted proposers can call `proposeAggregateRoot`." + }, + "removeSender(address)": { + "details": "Only allowlisted routers (senders) can call `dispatch`.", + "params": { + "_sender": "Sender to remove from whitelist" + } + }, + "send(bytes)": { + "params": { + "_encodedData": "Data needed to send crosschain message by associated amb" + } + }, + "setDelayBlocks(uint256)": { + "params": { + "_delayBlocks": "Updated delay block value" + } + }, + "setRateLimitBlocks(uint256)": { + "details": "Rate limit is used to mitigate DoS vectors. (See `RateLimited` for more info.)", + "params": { + "_rateLimit": "The number of blocks require between sending messages. If set to 0, rate limiting for this spoke connector will be disabled." + } + }, + "withdrawFunds(address)": { + "details": "Withdraws the entire balance of the contract.", + "params": { + "_to": "The recipient of the funds withdrawn" + } + } + }, + "version": 1 + }, + "userdoc": { + "events": { + "AggregateRootProposed(bytes32,uint256,uint256,uint32)": { + "notice": "Emitted when a new aggregate root is proposed" + }, + "AggregateRootReceived(bytes32)": { + "notice": "Emitted when a new aggregate root is delivered from the hub" + }, + "AggregateRootRemoved(bytes32)": { + "notice": "Emitted when a proposed aggregate root is removed by admin" + }, + "AggregateRootVerified(bytes32)": { + "notice": "Emitted when an aggregate root has made it through the fraud period without being disputed" + }, + "DelayBlocksUpdated(uint256,address)": { + "notice": "Emitted when the admin updates the delay blocks" + }, + "Dispatch(bytes32,uint256,bytes32,bytes)": { + "notice": "Emitted when a message is sent (leaf added to outbound root)" + }, + "DisputeBlocksUpdated(uint256,uint256)": { + "notice": "Emitted when the number of dispute blocks is updated" + }, + "FundsWithdrawn(address,uint256)": { + "notice": "Emitted when funds are withdrawn by the admin" + }, + "GasCapUpdated(uint256,uint256)": { + "notice": "Emitted when admin updates the gas cap" + }, + "MessageProcessed(bytes,address)": { + "notice": "Emitted whenever a message is successfully received over an AMB" + }, + "MessageProven(bytes32,bytes32,uint256)": { + "notice": "Emitted when a message (outbound root from different spoke) is proven against the aggregate root" + }, + "MessageSent(bytes,bytes,address)": { + "notice": "Emitted whenever a message is successfully sent over an AMB" + }, + "MinDisputeBlocksUpdated(uint256,uint256)": { + "notice": "Emitted whem the number of minimum dispute blocks is updated" + }, + "OptimisticModeActivated()": { + "notice": "Emitted when optimistic mode is activated" + }, + "PendingAggregateRootDeleted(bytes32)": { + "notice": "Emitted when a pending aggregate root is deleted from the pendingAggregateRoots mapping" + }, + "Process(bytes32,bool,bytes)": { + "notice": "Emitted when a message is handled (this is the destination domain)" + }, + "ProposedRootFinalized(bytes32)": { + "notice": "Emitted when the current proposed root is finalized" + }, + "ProposerAdded(address)": { + "notice": "Emitted when a new proposer is added" + }, + "ProposerRemoved(address)": { + "notice": "Emitted when a proposer is removed" + }, + "SenderAdded(address)": { + "notice": "Emitted when a new sender is whitelisted for messaging" + }, + "SenderRemoved(address)": { + "notice": "Emitted when a new sender is de-whitelisted for messaging" + }, + "SlowModeActivated(address)": { + "notice": "Emitted when slow mode is activated" + }, + "WatcherManagerChanged(address)": { + "notice": "Emitted when the manager address changes" + } + }, + "kind": "user", + "methods": { + "AMB()": { + "notice": "Address of the AMB on this domain." + }, + "DOMAIN()": { + "notice": "The domain of this Messaging (i.e. Connector) contract." + }, + "FINALIZED_HASH()": { + "notice": "Hash used to keep the proposal slot warm once a given proposal has been finalized." + }, + "MERKLE()": { + "notice": "MerkleTreeManager contract instance. Will hold the active tree of message hashes, whose root will be sent crosschain to the hub for aggregation and redistribution." + }, + "MIRROR_DOMAIN()": { + "notice": "The domain of the corresponding messaging (i.e. Connector) contract." + }, + "PROCESS_GAS()": { + "notice": "Minimum gas for processing a received message (reserved for handle)" + }, + "RESERVE_GAS()": { + "notice": "Reserved gas (to ensure tx completes in case message processing runs out)" + }, + "ROOT_MANAGER()": { + "notice": "RootManager contract address." + }, + "acceptProposedOwner()": { + "notice": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "activateOptimisticMode()": { + "notice": "Owner can set the system to optimistic mode." + }, + "activateSlowMode()": { + "notice": "Watcher can set the system in slow mode." + }, + "addProposer(address)": { + "notice": "Adds a proposer to the allowlist." + }, + "addSender(address)": { + "notice": "Adds a sender to the allowlist." + }, + "allowlistedProposers(address)": { + "notice": "This is used for the `onlyProposers` modifier, which gates who can propose new roots using `proposeAggregateRoot`." + }, + "allowlistedSenders(address)": { + "notice": "Records all whitelisted senders" + }, + "delay()": { + "notice": "Returns the delay period before a new owner can be accepted." + }, + "delayBlocks()": { + "notice": "Number of blocks to delay the processing of a message to allow for watchers to verify the validity and pause if necessary." + }, + "dispatch(uint32,bytes32,bytes)": { + "notice": "This function adds transfers to the outbound transfer merkle tree." + }, + "finalize(bytes32,uint256,uint256)": { + "notice": "Finalizes the proposed aggregate root. This confirms the root validity. Therefore, it can be proved and processed." + }, + "gasCap()": { + "notice": "The gnosis amb requires destination gas to be specified on the origin. The gas used will be passed in by the relayer to allow for real-time estimates, but will be capped at the admin-set cap." + }, + "getLastCompletedSnapshotId()": { + "notice": "This function gets the last completed snapshot id" + }, + "getSnapshotDuration()": { + "notice": "Get the duration of the snapshot" + }, + "home()": { + "notice": "Get the local inbox contract from the xAppConnectionManager" + }, + "isReplica(address)": { + "notice": "Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager" + }, + "lastSentBlock()": { + "notice": "Tracks the last block that we sent a message." + }, + "localDomain()": { + "notice": "This provides the implementation for what is defined in the ConnectorManager to avoid storing the domain redundantly" + }, + "minDisputeBlocks()": { + "notice": "The minimum number of blocks disputeBlocks can be set to." + }, + "mirrorConnector()": { + "notice": "Connector on L2 for L1 connectors, and vice versa." + }, + "optimisticMode()": { + "notice": "True if the system is working in optimistic mode. Otherwise is working in slow mode" + }, + "outboundRoot()": { + "notice": "This returns the root of all messages with the origin domain as this domain (i.e. all outbound messages)" + }, + "owner()": { + "notice": "Returns the address of the current owner." + }, + "pause()": { + "notice": "Watchers can pause contracts if fraud is detected" + }, + "pendingAggregateRoots(bytes32)": { + "notice": "This will hold the commit block for incoming aggregateRoots from the hub chain. Once they are verified, (i.e. have surpassed the verification period in `delayBlocks`) they can be used for proving inclusion of crosschain messages." + }, + "processMessage(bytes)": { + "notice": "Processes a message received by an AMB" + }, + "proposeAggregateRoot(bytes32,uint256)": { + "notice": "Propose a new aggregate root" + }, + "proposeNewOwner(address)": { + "notice": "Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process" + }, + "proposed()": { + "notice": "Returns the address of the proposed owner." + }, + "proposedAggregateRootHash()": { + "notice": "The resulting hash of keccaking the proposed aggregate root, the timestamp at which it was finalized in the root manager and the block at which the time to dispute it ends." + }, + "proposedTimestamp()": { + "notice": "Returns the address of the proposed owner." + }, + "proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256)": { + "notice": "Must be able to call the `handle` function on the BridgeRouter contract. This is called on the destination domain to handle incoming messages. Proving: Calculates the expected inbound root from an origin chain given a leaf (message hash), the index of the leaf, and the merkle proof of inclusion (path). Next, we check to ensure that this calculated inbound root is included in the current aggregateRoot, given its index in the aggregator tree and the proof of inclusion. Processing: After all messages have been proven, we dispatch each message to Connext (BridgeRouter) for execution." + }, + "provenAggregateRoots(bytes32)": { + "notice": "This tracks the roots of the aggregate tree containing outbound roots from all other supported domains. The current version is the one that is known to be past the delayBlocks time period." + }, + "provenMessageRoots(bytes32)": { + "notice": "This tracks whether the root has been proven to exist within the given aggregate root." + }, + "rateLimitBlocks()": { + "notice": "The number of blocks required between message sending events." + }, + "removePendingAggregateRoot(bytes32)": { + "notice": "Manually remove a pending aggregateRoot by owner if the contract is paused." + }, + "removeProposer(address)": { + "notice": "Removes a proposer from the allowlist." + }, + "removeSender(address)": { + "notice": "Removes a sender from the allowlist." + }, + "renounceOwnership()": { + "notice": "Should not be able to renounce ownership" + }, + "renounced()": { + "notice": "Indicates if the ownership has been renounced() by checking if current owner is address(0)" + }, + "send(bytes)": { + "notice": "This dispatches outbound root to hub via AMB" + }, + "sentMessageRoots(bytes32)": { + "notice": "This mapping records all message roots that have already been sent in order to prevent redundant message roots from being sent to hub." + }, + "setDelayBlocks(uint256)": { + "notice": "Set the `delayBlocks`, the period in blocks over which an incoming message is verified." + }, + "setDisputeBlocks(uint256)": { + "notice": "Set the `disputeBlocks`, the duration, in blocks, of the dispute process for a given proposed root" + }, + "setMinDisputeBlocks(uint256)": { + "notice": "Set the `minDisputeBlocks` variable to the provided parameter." + }, + "setMirrorConnector(address)": { + "notice": "Sets the address of the l2Connector for this domain" + }, + "setRateLimitBlocks(uint256)": { + "notice": "Set the rate limit (number of blocks) at which we can send messages from this contract to the hub chain using the `send` method." + }, + "setWatcherManager(address)": { + "notice": "Owner can enroll a watcher (abilities are defined by inheriting contracts)" + }, + "snapshotRoots(uint256)": { + "notice": "Mapping of the snapshot roots for a specific index. Used for data availability for off-chain scripts" + }, + "unpause()": { + "notice": "Owner can unpause contracts if fraud is detected by watchers" + }, + "verifySender(address)": { + "notice": "Checks the cross domain sender for a given address" + }, + "watcherManager()": { + "notice": "The `WatcherManager` contract governs the watcher allowlist." + }, + "withdrawFunds(address)": { + "notice": "This function should be callable by owner, and send funds trapped on a connector to the provided recipient." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 49880, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 49882, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "_proposed", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 49884, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 34491, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "mirrorConnector", + "offset": 0, + "slot": "3", + "type": "t_address" + }, + { + "astId": 2738, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "_paused", + "offset": 20, + "slot": "3", + "type": "t_bool" + }, + { + "astId": 34245, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "watcherManager", + "offset": 0, + "slot": "4", + "type": "t_contract(WatcherManager)34436" + }, + { + "astId": 49785, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "rateLimitBlocks", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 49788, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "lastSentBlock", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 2839, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "_status", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 35153, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "delayBlocks", + "offset": 0, + "slot": "8", + "type": "t_uint256" + }, + { + "astId": 35168, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "pendingAggregateRoots", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 35173, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "provenAggregateRoots", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 35178, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "provenMessageRoots", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 35183, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "sentMessageRoots", + "offset": 0, + "slot": "12", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 35188, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "allowlistedSenders", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 35193, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "snapshotRoots", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_uint256,t_bytes32)" + }, + { + "astId": 35197, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "proposedAggregateRootHash", + "offset": 0, + "slot": "15", + "type": "t_bytes32" + }, + { + "astId": 35199, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "disputeBlocks", + "offset": 0, + "slot": "16", + "type": "t_uint256" + }, + { + "astId": 35202, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "minDisputeBlocks", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 35209, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "optimisticMode", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 35214, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "allowlistedProposers", + "offset": 0, + "slot": "19", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 34800, + "contract": "contracts/messaging/connectors/optimism/OptimismSpokeConnector.sol:OptimismSpokeConnector", + "label": "gasCap", + "offset": 0, + "slot": "20", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(WatcherManager)34436": { + "encoding": "inplace", + "label": "contract WatcherManager", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/InboxFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/InboxFacetStaging.json new file mode 100644 index 0000000000..ed5288b9a3 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/InboxFacetStaging.json @@ -0,0 +1,1060 @@ +{ + "address": "0x5efE4a498a9b4Ea0DC86e1772A17Dc62Ab4105AD", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__handle_notTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyRemoteRouter_notRemote", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__onlyReplica_notReplica", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_alreadyReconciled", + "type": "error" + }, + { + "inputs": [], + "name": "InboxFacet__reconcile_noPortalRouter", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "actual", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "TypedMemView__assertType_typeAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__assertValid_validityAssertionFailed", + "type": "error" + }, + { + "inputs": [], + "name": "TypedMemView__index_indexMoreThan32Bytes", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "loc", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "len", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slice", + "type": "uint256" + } + ], + "name": "TypedMemView__index_overrun", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "originAndNonce", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "liquidityProvider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Receive", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "routers", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Reconciled", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_origin", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_nonce", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "_sender", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + } + ], + "name": "handle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x5deeddb02657925e6e06bfc79bdf150f2f750185701c74adbd2c8a7d34685983", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "976744", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd988c801167d4fc0d8c1f901b7c04fc40e32296614f913afc753eb0776881b0d", + "transactionHash": "0x5deeddb02657925e6e06bfc79bdf150f2f750185701c74adbd2c8a7d34685983", + "logs": [], + "blockNumber": 2894790, + "cumulativeGasUsed": "1044406", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__handle_notTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__onlyRemoteRouter_notRemote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__onlyReplica_notReplica\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__reconcile_alreadyReconciled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InboxFacet__reconcile_noPortalRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__assertType_typeAssertionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__assertValid_validityAssertionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TypedMemView__index_indexMoreThan32Bytes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"slice\",\"type\":\"uint256\"}],\"name\":\"TypedMemView__index_overrun\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"originAndNonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Receive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Reconciled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_origin\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_nonce\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"handle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Receive(uint64,address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of tokens being received\",\"liquidityProvider\":\"The account providing liquidity\",\"originAndNonce\":\"Domain where the transfer originated and the unique identifier for the message from origin to destination, combined in a single field ((origin << 32) & nonce)\",\"recipient\":\"The address receiving the tokens; the original recipient of the transfer\",\"token\":\"The address of the local token contract being received\"}},\"Reconciled(bytes32,uint32,address,address[],uint256,address)\":{\"params\":{\"amount\":\"- The amount that was provided by the bridge.\",\"caller\":\"- The account that called the function\",\"local\":\"- The local asset that was provided by the bridge.\",\"originDomain\":\"- The originating domain of the transfer.\",\"routers\":\"- The routers that were reimbursed the bridged token, if fast liquidity was provided for the given transfer.\",\"transferId\":\"- The unique identifier of the transfer.\"}}},\"kind\":\"dev\",\"methods\":{\"handle(uint32,uint32,bytes32,bytes)\":{\"params\":{\"_message\":\"The message body.\",\"_nonce\":\"The unique identifier for the message from origin to destination.\",\"_origin\":\"The origin domain.\",\"_sender\":\"The sender address.\"}}},\"title\":\"InboxFacet\",\"version\":1},\"userdoc\":{\"events\":{\"Receive(uint64,address,address,address,uint256)\":{\"notice\":\"emitted when tokens are dispensed to an account on this domain emitted both when fast liquidity is provided, and when the transfer ultimately settles\"},\"Reconciled(bytes32,uint32,address,address[],uint256,address)\":{\"notice\":\"Emitted when `reconciled` is called by the bridge on the destination domain.\"}},\"kind\":\"user\",\"methods\":{\"handle(uint32,uint32,bytes32,bytes)\":{\"notice\":\"Handles an incoming cross-chain message.\"}},\"notice\":\"This is the facet that holds all the functionality needed for Connext's messaging layer to reconcile cross-chain transfers. Authenticated (proven) message data is delivered to the `reconcile` function, where it is parsed to determine the message action. Tokens are credited (representational assets are minted, canonical tokens are unlocked from escrow) if applicable.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/InboxFacet.sol\":\"InboxFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/InboxFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\n\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {BridgeMessage} from \\\"../libraries/BridgeMessage.sol\\\";\\nimport {DestinationTransferStatus} from \\\"../libraries/LibConnextStorage.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\n/**\\n * @title InboxFacet\\n * @notice This is the facet that holds all the functionality needed for Connext's messaging layer to\\n * reconcile cross-chain transfers. Authenticated (proven) message data is delivered to the `reconcile`\\n * function, where it is parsed to determine the message action. Tokens are credited (representational\\n * assets are minted, canonical tokens are unlocked from escrow) if applicable.\\n *\\n */\\ncontract InboxFacet is BaseConnextFacet {\\n // ============ Libraries ============\\n\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n using BridgeMessage for bytes29;\\n\\n // ========== Custom Errors ===========\\n\\n error InboxFacet__onlyReplica_notReplica();\\n error InboxFacet__onlyRemoteRouter_notRemote();\\n error InboxFacet__handle_notTransfer();\\n error InboxFacet__reconcile_alreadyReconciled();\\n error InboxFacet__reconcile_noPortalRouter();\\n\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted when `reconciled` is called by the bridge on the destination domain.\\n * @param transferId - The unique identifier of the transfer.\\n * @param originDomain - The originating domain of the transfer.\\n * @param local - The local asset that was provided by the bridge.\\n * @param routers - The routers that were reimbursed the bridged token, if fast liquidity was\\n * provided for the given transfer.\\n * @param amount - The amount that was provided by the bridge.\\n * @param caller - The account that called the function\\n */\\n event Reconciled(\\n bytes32 indexed transferId,\\n uint32 indexed originDomain,\\n address indexed local,\\n address[] routers,\\n uint256 amount,\\n address caller\\n );\\n\\n /**\\n * @notice emitted when tokens are dispensed to an account on this domain\\n * emitted both when fast liquidity is provided, and when the\\n * transfer ultimately settles\\n * @param originAndNonce Domain where the transfer originated and the\\n * unique identifier for the message from origin to destination,\\n * combined in a single field ((origin << 32) & nonce)\\n * @param token The address of the local token contract being received\\n * @param recipient The address receiving the tokens; the original\\n * recipient of the transfer\\n * @param liquidityProvider The account providing liquidity\\n * @param amount The amount of tokens being received\\n */\\n event Receive(\\n uint64 indexed originAndNonce,\\n address indexed token,\\n address indexed recipient,\\n address liquidityProvider,\\n uint256 amount\\n );\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Only accept messages from a registered inbox contract.\\n */\\n modifier onlyReplica() {\\n if (!_isReplica(msg.sender)) {\\n revert InboxFacet__onlyReplica_notReplica();\\n }\\n _;\\n }\\n\\n /**\\n * @notice Only accept messages from a remote Router contract.\\n * @param _origin The domain the message is coming from.\\n * @param _router The address the message is coming from.\\n */\\n modifier onlyRemoteHandler(uint32 _origin, bytes32 _router) {\\n if (!_isRemoteHandler(_origin, _router)) {\\n revert InboxFacet__onlyRemoteRouter_notRemote();\\n }\\n _;\\n }\\n\\n // ============ External Functions ============\\n\\n /**\\n * @notice Handles an incoming cross-chain message.\\n *\\n * @param _origin The origin domain.\\n * @param _nonce The unique identifier for the message from origin to destination.\\n * @param _sender The sender address.\\n * @param _message The message body.\\n */\\n function handle(\\n uint32 _origin,\\n uint32 _nonce,\\n bytes32 _sender,\\n bytes memory _message\\n ) external onlyReplica onlyRemoteHandler(_origin, _sender) {\\n // Parse token ID and action from message body.\\n bytes29 _msg = _message.ref(0).mustBeMessage();\\n bytes29 _tokenId = _msg.tokenId();\\n bytes29 _action = _msg.action();\\n\\n // Sanity check: action must be a valid transfer.\\n if (!_action.isTransfer()) {\\n revert InboxFacet__handle_notTransfer();\\n }\\n\\n // If applicable, mint the local asset that corresponds with the message's token ID in the\\n // amount specified by the message.\\n // Returns the local asset address and message's amount.\\n (address _token, uint256 _amount) = _creditTokens(_origin, _nonce, _tokenId, _action);\\n\\n // Reconcile the transfer.\\n _reconcile(_action.transferId(), _origin, _token, _amount);\\n }\\n\\n // ============ Internal Functions ============\\n\\n /**\\n * @notice Reconcile the transfer, marking the transfer ID in storage as authenticated. Reimburses\\n * routers with local asset if it was a fast-liquidity transfer (i.e. it was previously executed).\\n * @param _transferId Unique identifier of the transfer.\\n * @param _origin Origin domain of the transfer.\\n * @param _asset Local asset address (representational or canonical).\\n * @param _amount The amount of the local asset.\\n */\\n function _reconcile(\\n bytes32 _transferId,\\n uint32 _origin,\\n address _asset,\\n uint256 _amount\\n ) internal {\\n // Ensure the transfer has not already been handled (i.e. previously reconciled).\\n // Will be previously reconciled IFF status == reconciled -or- status == executed\\n // and there is no path length on the transfers (no fast liquidity)\\n DestinationTransferStatus status = s.transferStatus[_transferId];\\n if (status != DestinationTransferStatus.None && status != DestinationTransferStatus.Executed) {\\n revert InboxFacet__reconcile_alreadyReconciled();\\n }\\n\\n // Mark the transfer as reconciled.\\n s.transferStatus[_transferId] = status == DestinationTransferStatus.None\\n ? DestinationTransferStatus.Reconciled\\n : DestinationTransferStatus.Completed;\\n\\n // If the transfer was executed using fast-liquidity provided by routers, then this value would be set\\n // to the participating routers.\\n // NOTE: If the transfer was not executed using fast-liquidity, then the funds will be reserved for\\n // execution (i.e. funds will be delivered to the transfer's recipient in a subsequent `execute` call).\\n address[] memory routers = s.routedTransfers[_transferId];\\n\\n // If fast transfer was made using portal liquidity, portal debt must be repaid first.\\n // NOTE: Routers can repay any-amount out-of-band using the `repayAavePortal` method\\n // or by interacting with the aave contracts directly.\\n uint256 portalTransferAmount = s.portalDebt[_transferId] + s.portalFeeDebt[_transferId];\\n\\n uint256 pathLen = routers.length;\\n // Sanity check: ensure a router took on the credit risk.\\n if (portalTransferAmount != 0 && pathLen != 1) {\\n revert InboxFacet__reconcile_noPortalRouter();\\n }\\n\\n if (pathLen != 0) {\\n // Credit each router that provided liquidity their due 'share' of the asset.\\n uint256 routerAmount = _amount / pathLen;\\n for (uint256 i; i < pathLen - 1; ) {\\n s.routerBalances[routers[i]][_asset] += routerAmount;\\n unchecked {\\n ++i;\\n }\\n }\\n // The last router in the multipath will sweep the remaining balance to account for remainder dust.\\n uint256 toSweep = routerAmount + (_amount % pathLen);\\n s.routerBalances[routers[pathLen - 1]][_asset] += toSweep;\\n }\\n\\n emit Reconciled(_transferId, _origin, _asset, routers, _amount, msg.sender);\\n }\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function _isReplica(address _potentialReplica) internal view returns (bool) {\\n return s.xAppConnectionManager.isReplica(_potentialReplica);\\n }\\n\\n /**\\n * @notice Return true if the given domain / router is the address of a remote xApp Router\\n * @param _domain The domain of the potential remote xApp Router\\n * @param _xAppHandler The address of the potential remote xApp handler\\n */\\n function _isRemoteHandler(uint32 _domain, bytes32 _xAppHandler) internal view returns (bool) {\\n return s.remotes[_domain] == _xAppHandler && _xAppHandler != bytes32(0);\\n }\\n\\n /**\\n * @notice If applicable, mints tokens corresponding to the inbound message action.\\n * @dev IFF the asset is representational (i.e. originates from a remote chain), tokens will be minted.\\n * Otherwise, the token must be canonical (i.e. we are on the token's home chain), and the corresponding\\n * amount will already be available in escrow in this contract.\\n *\\n * @param _origin The domain of the chain from which the transfer originated.\\n * @param _nonce The unique identifier for the message from origin to destination.\\n * @param _tokenId The canonical token identifier to credit.\\n * @param _action The contents of the transfer message.\\n * @return _token The address of the local token contract.\\n */\\n function _creditTokens(\\n uint32 _origin,\\n uint32 _nonce,\\n bytes29 _tokenId,\\n bytes29 _action\\n ) internal returns (address, uint256) {\\n bytes32 _canonicalId = _tokenId.id();\\n uint32 _canonicalDomain = _tokenId.domain();\\n\\n // Load amount once.\\n uint256 _amount = _action.amnt();\\n\\n // Check for the empty case -- if it is 0 value there is no strict requirement for the\\n // canonical information be defined (i.e. you can supply address(0) to xcall). If this\\n // is the case, return _token as address(0)\\n if (_amount == 0 && _canonicalDomain == 0 && _canonicalId == bytes32(0)) {\\n // Emit Receive event and short-circuit remaining logic: no tokens need to be delivered.\\n emit Receive(_originAndNonce(_origin, _nonce), address(0), address(this), address(0), _amount);\\n return (address(0), 0);\\n }\\n\\n // Get the token contract for the given tokenId on this chain.\\n address _token = _getLocalAsset(\\n AssetLogic.calculateCanonicalHash(_canonicalId, _canonicalDomain),\\n _canonicalId,\\n _canonicalDomain\\n );\\n\\n if (_amount == 0) {\\n // Emit Receive event and short-circuit remaining logic: no tokens need to be delivered.\\n emit Receive(_originAndNonce(_origin, _nonce), _token, address(this), address(0), _amount);\\n return (_token, 0);\\n }\\n\\n // Mint the tokens into circulation on this chain.\\n if (!_isLocalOrigin(_token)) {\\n // If the token is of remote origin, mint the representational asset into circulation here.\\n // NOTE: The bridge tokens should be distributed to their intended recipient outside\\n IBridgeToken(_token).mint(address(this), _amount);\\n }\\n // NOTE: If the tokens are locally originating - meaning they are the canonical asset - then they\\n // would be held in escrow in this contract. If we're receiving this message, it must mean\\n // corresponding representational assets circulating on a remote chain were burnt when it was sent.\\n\\n // Emit Receive event.\\n emit Receive(_originAndNonce(_origin, _nonce), _token, address(this), address(0), _amount);\\n return (_token, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x776789bda0036f8f9b9917bb039d7f0b722ddabc8396093685e1b9c2d41a45ae\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n function burn(address _from, uint256 _amnt) external;\\n\\n function mint(address _to, uint256 _amnt) external;\\n\\n function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/BridgeMessage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {TypedMemView} from \\\"../../../shared/libraries/TypedMemView.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary BridgeMessage {\\n // ============ Libraries ============\\n\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // ============ Enums ============\\n\\n // WARNING: do NOT re-write the numbers / order\\n // of message types in an upgrade;\\n // will cause in-flight messages to be mis-interpreted\\n // The Types enum it defines the types of `views` that we use in BridgeMessage. A view\\n // points to a specific part of the memory and can slice bytes out of it. When we give a `type` to a view,\\n // we define the structure of the data it points to, so that we can do easy runtime assertions without\\n // having to fetch the whole data from memory and check for ourselves. In BridgeMessage.sol\\n // the types of `data` we can have are defined in this enum and may belong to different taxonomies.\\n // For example, a `Message` includes a `TokenId` and an Action (a `Transfer`).\\n // The Message is a different TYPE of data than a TokenId or Transfer, as TokenId and Transfer live inside\\n // the message. For that reason, we define them as different data types and we add them to the same enum\\n // for ease of use.\\n enum Types {\\n Invalid, // 0\\n TokenId, // 1\\n Message, // 2\\n Transfer // 3\\n }\\n\\n // ============ Constants ============\\n\\n uint256 private constant TOKEN_ID_LEN = 36; // 4 bytes domain + 32 bytes id\\n uint256 private constant IDENTIFIER_LEN = 1;\\n uint256 private constant TRANSFER_LEN = 65; // 1 byte identifier + 32 bytes amount + 32 bytes transfer id\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Asserts a message is of type `_t`\\n * @param _view The message\\n * @param _t The expected type\\n */\\n modifier typeAssert(bytes29 _view, Types _t) {\\n _view.assertType(uint40(_t));\\n _;\\n }\\n\\n // ============ Internal Functions ============\\n\\n /**\\n * @notice Checks that Action is valid type\\n * @param _action The action\\n * @return TRUE if action is valid\\n */\\n function isValidAction(bytes29 _action) internal pure returns (bool) {\\n return isTransfer(_action);\\n }\\n\\n /**\\n * @notice Checks that view is a valid message length\\n * @param _view The bytes string\\n * @return TRUE if message is valid\\n */\\n function isValidMessageLength(bytes29 _view) internal pure returns (bool) {\\n uint256 _len = _view.len();\\n return _len == TOKEN_ID_LEN + TRANSFER_LEN;\\n }\\n\\n /**\\n * @notice Formats an action message\\n * @param _tokenId The token ID\\n * @param _action The action\\n * @return The formatted message\\n */\\n function formatMessage(bytes29 _tokenId, bytes29 _action)\\n internal\\n view\\n typeAssert(_tokenId, Types.TokenId)\\n returns (bytes memory)\\n {\\n require(isValidAction(_action), \\\"!action\\\");\\n bytes29[] memory _views = new bytes29[](2);\\n _views[0] = _tokenId;\\n _views[1] = _action;\\n return TypedMemView.join(_views);\\n }\\n\\n /**\\n * @notice Returns the type of the message\\n * @param _view The message\\n * @return The type of the message\\n */\\n function messageType(bytes29 _view) internal pure returns (Types) {\\n return Types(uint8(_view.typeOf()));\\n }\\n\\n /**\\n * @notice Checks that the message is of the specified type\\n * @param _type the type to check for\\n * @param _action The message\\n * @return True if the message is of the specified type\\n */\\n function isType(bytes29 _action, Types _type) internal pure returns (bool) {\\n return actionType(_action) == uint8(_type) && messageType(_action) == _type;\\n }\\n\\n /**\\n * @notice Checks that the message is of type Transfer\\n * @param _action The message\\n * @return True if the message is of type Transfer\\n */\\n function isTransfer(bytes29 _action) internal pure returns (bool) {\\n return isType(_action, Types.Transfer);\\n }\\n\\n /**\\n * @notice Formats Transfer\\n * @param _amnt The transfer amount\\n * @param _transferId The unique identifier of the transfer\\n * @return\\n */\\n function formatTransfer(uint256 _amnt, bytes32 _transferId) internal pure returns (bytes29) {\\n return abi.encodePacked(Types.Transfer, _amnt, _transferId).ref(uint40(Types.Transfer));\\n }\\n\\n /**\\n * @notice Serializes a Token ID struct\\n * @param _tokenId The token id struct\\n * @return The formatted Token ID\\n */\\n function formatTokenId(TokenId memory _tokenId) internal pure returns (bytes29) {\\n return formatTokenId(_tokenId.domain, _tokenId.id);\\n }\\n\\n /**\\n * @notice Creates a serialized Token ID from components\\n * @param _domain The domain\\n * @param _id The ID\\n * @return The formatted Token ID\\n */\\n function formatTokenId(uint32 _domain, bytes32 _id) internal pure returns (bytes29) {\\n return abi.encodePacked(_domain, _id).ref(uint40(Types.TokenId));\\n }\\n\\n /**\\n * @notice Retrieves the domain from a TokenID\\n * @param _tokenId The message\\n * @return The domain\\n */\\n function domain(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (uint32) {\\n return uint32(_tokenId.indexUint(0, 4));\\n }\\n\\n /**\\n * @notice Retrieves the ID from a TokenID\\n * @param _tokenId The message\\n * @return The ID\\n */\\n function id(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (bytes32) {\\n // before = 4 bytes domain\\n return _tokenId.index(4, 32);\\n }\\n\\n /**\\n * @notice Retrieves the EVM ID\\n * @param _tokenId The message\\n * @return The EVM ID\\n */\\n function evmId(bytes29 _tokenId) internal pure typeAssert(_tokenId, Types.TokenId) returns (address) {\\n // before = 4 bytes domain + 12 bytes empty to trim for address\\n return _tokenId.indexAddress(16);\\n }\\n\\n /**\\n * @notice Retrieves the action identifier from message\\n * @param _message The action\\n * @return The message type\\n */\\n function msgType(bytes29 _message) internal pure returns (uint8) {\\n return uint8(_message.indexUint(TOKEN_ID_LEN, 1));\\n }\\n\\n /**\\n * @notice Retrieves the identifier from action\\n * @param _action The action\\n * @return The action type\\n */\\n function actionType(bytes29 _action) internal pure returns (uint8) {\\n return uint8(_action.indexUint(0, 1));\\n }\\n\\n /**\\n * @notice Retrieves the amount from a Transfer\\n * @param _transferAction The message\\n * @return The amount\\n */\\n function amnt(bytes29 _transferAction) internal pure returns (uint256) {\\n // before = 1 byte identifier = 1 bytes\\n return _transferAction.indexUint(1, 32);\\n }\\n\\n /**\\n * @notice Retrieves the transfer id from a Transfer\\n * @param _transferAction The message\\n * @return The id\\n */\\n function transferId(bytes29 _transferAction) internal pure returns (bytes32) {\\n // before = 1 byte identifier + 32 bytes amount = 33 bytes\\n return _transferAction.index(33, 32);\\n }\\n\\n /**\\n * @notice Retrieves the token ID from a Message\\n * @param _message The message\\n * @return The ID\\n */\\n function tokenId(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n return _message.slice(0, TOKEN_ID_LEN, uint40(Types.TokenId));\\n }\\n\\n /**\\n * @notice Retrieves the action data from a Message\\n * @param _message The message\\n * @return The action\\n */\\n function action(bytes29 _message) internal pure typeAssert(_message, Types.Message) returns (bytes29) {\\n uint256 _actionLen = _message.len() - TOKEN_ID_LEN;\\n uint40 _type = uint40(msgType(_message));\\n return _message.slice(TOKEN_ID_LEN, _actionLen, _type);\\n }\\n\\n /**\\n * @notice Converts to a Message\\n * @param _message The message\\n * @return The newly typed message\\n */\\n function tryAsMessage(bytes29 _message) internal pure returns (bytes29) {\\n if (isValidMessageLength(_message)) {\\n return _message.castTo(uint40(Types.Message));\\n }\\n return TypedMemView.nullView();\\n }\\n\\n /**\\n * @notice Asserts that the message is of type Message\\n * @param _view The message\\n * @return The message\\n */\\n function mustBeMessage(bytes29 _view) internal pure returns (bytes29) {\\n return tryAsMessage(_view).assertValid();\\n }\\n}\\n\",\"keccak256\":\"0x18f34053f524fbed1c307c08e863d015b96dade86249276eb05fbd5b8ac86a6b\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506110ad806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ab2dc3f514610030575b600080fd5b61004361003e366004610e33565b610045565b005b61004e3361013c565b61006b5760405163761c560f60e11b815260040160405180910390fd5b838261007782826101b1565b610094576040516346b4a0e960e01b815260040160405180910390fd5b60006100ae6100a385836101db565b62ffffff19166101ff565b905060006100c162ffffff198316610218565b905060006100d462ffffff19841661024d565b90506100e562ffffff1982166102a5565b61010257604051632af392f960e11b815260040160405180910390fd5b6000806101118b8b86866102b2565b9150915061012f6101278462ffffff1916610500565b8c8484610515565b5050505050505050505050565b602054604051635190bc5360e01b81526001600160a01b0383811660048301526000921690635190bc5390602401602060405180830381865afa158015610187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ab9190610f0f565b92915050565b63ffffffff82166000908152600f6020526040812054821480156101d457508115155b9392505050565b8151600090602084016101f664ffffffffff85168284610827565b95945050505050565b60006101ab61020d83610864565b62ffffff1916610896565b600081600261022f815b62ffffff198416906108c3565b5061024562ffffff198516600060246001610914565b949350505050565b600081600261025b81610222565b5060006102766024601887901c6001600160601b0316610f5d565b9050600061028386610984565b60ff16905061029b62ffffff19871660248484610914565b9695505050505050565b60006101ab826003610999565b600080806102c562ffffff1986166109f8565b905060006102d862ffffff198716610a1a565b905060006102eb62ffffff198716610a3c565b9050801580156102ff575063ffffffff8216155b8015610309575082155b1561037f5730600067ffffffff0000000060208c901b1663ffffffff8b161760408051600081526020810186905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a4600080945094505050506104f7565b600061039561038e8585610a51565b8585610a93565b90508160000361041857306001600160a01b03821667ffffffff0000000060208d901b1663ffffffff8c161760408051600081526020810187905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a49450600093506104f792505050565b61042181610aa2565b610486576040516340c10f1960e01b8152306004820152602481018390526001600160a01b038216906340c10f1990604401600060405180830381600087803b15801561046d57600080fd5b505af1158015610481573d6000803e3d6000fd5b505050505b306001600160a01b03821667ffffffff0000000060208d901b1663ffffffff8c161760408051600081526020810187905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a49450925050505b94509492505050565b60006101ab62ffffff19831660216020610aaf565b60008481526008602052604081205460ff169081600381111561053a5761053a610f31565b1415801561055a5750600281600381111561055757610557610f31565b14155b1561057857604051638f6bc06f60e01b815260040160405180910390fd5b600081600381111561058c5761058c610f31565b1461059857600361059b565b60015b6000868152600860205260409020805460ff191660018360038111156105c3576105c3610f31565b021790555060008581526009602090815260408083208054825181850281018501909352808352919290919083018282801561062857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161060a575b5050506000898152601e6020908152604080832054601d90925282205494955090936106579350909150610f70565b8251909150811580159061066c575080600114155b1561068a5760405163d3bd901560e01b815260040160405180910390fd5b80156107d057600061069c8287610f99565b905060005b6106ac600184610f5d565b81101561073457816000600a0160008784815181106106cd576106cd610fad565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107279190610f70565b90915550506001016106a1565b5060006107418388610fc3565b61074b9083610f70565b905080600a60008761075e600188610f5d565b8151811061076e5761076e610fad565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107c89190610f70565b909155505050505b856001600160a01b03168763ffffffff16897f30bf44531c04b96173a40012c90db840a147cf7d50a3e160f5227f1af2faa3a086893360405161081593929190610fd7565b60405180910390a45050505050505050565b6000806108348385610f70565b9050604051811115610844575060005b806000036108595762ffffff199150506101d4565b6101f6858585610bba565b600061086f82610c31565b1561088c576301000000600160d81b038216600160d91b176101ab565b62ffffff196101ab565b60006108a182610c54565b156108bf5760405163252e0d8360e01b815260040160405180910390fd5b5090565b60006108cf8383610c90565b61090d576108dd8360d81c90565b60405163d32c1d3760e01b815264ffffffffff918216600482015290831660248201526044015b60405180910390fd5b5090919050565b60008061092a8660781c6001600160601b031690565b6001600160601b0316905061093e86610cb3565b846109498784610f70565b6109539190610f70565b11156109665762ffffff19915050610245565b6109708582610f70565b905061029b8364ffffffffff168286610827565b60006101ab62ffffff19831660246001610cec565b60008160038111156109ad576109ad610f31565b60ff166109b984610d1c565b60ff161480156101d457508160038111156109d6576109d6610f31565b6109df84610d30565b60038111156109f0576109f0610f31565b149392505050565b6000816001610a0681610222565b5061024562ffffff19851660046020610aaf565b6000816001610a2881610222565b5061024562ffffff19851660006004610cec565b60006101ab62ffffff19831660016020610cec565b60008282604051602001610a7592919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60006102458484846000610d4b565b60006101ab826000610d84565b60008160ff16600003610ac4575060006101d4565b610ad78460181c6001600160601b031690565b6001600160601b0316610aed60ff841685610f70565b1115610b5557610b068460781c6001600160601b031690565b610b198560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610904565b60208260ff161115610b7a5760405163045df3f960e01b815260040160405180910390fd5b600882026000610b938660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b60006060601883856001600160601b03821682148015610be2575086816001600160601b0316145b610c1b5760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610904565b96831b90961790911b90941790931b9392505050565b6000601882901c6001600160601b0316610c4d60416024610f70565b1492915050565b6000610c608260d81c90565b64ffffffffff1664ffffffffff03610c7a57506001919050565b6000610c8583610cb3565b604051109392505050565b60008164ffffffffff16610ca48460d81c90565b64ffffffffff16149392505050565b6000610cc88260181c6001600160601b031690565b610cdb8360781c6001600160601b031690565b016001600160601b03169050919050565b6000610cf982602061103b565b610d04906008611054565b60ff16610d12858585610aaf565b901c949350505050565b60006101ab62ffffff198316826001610cec565b600060d882901c60ff1660038111156101ab576101ab610f31565b600481015460009063ffffffff90811690841603610d6a575082610245565b610d7385610dc3565b546001600160a01b03169050610245565b6001600160a01b038216600090815260068201602052604081205463ffffffff1615610db2575060006101ab565b50506001600160a01b03163b151590565b6000818152600760205260408120600180820154839291600160a01b90910460ff1610156101d45760405163618cca3f60e11b815260040160405180910390fd5b803563ffffffff81168114610e1857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610e4957600080fd5b610e5285610e04565b9350610e6060208601610e04565b925060408501359150606085013567ffffffffffffffff80821115610e8457600080fd5b818701915087601f830112610e9857600080fd5b813581811115610eaa57610eaa610e1d565b604051601f8201601f19908116603f01168101908382118183101715610ed257610ed2610e1d565b816040528281528a6020848701011115610eeb57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060208284031215610f2157600080fd5b815180151581146101d457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156101ab576101ab610f47565b808201808211156101ab576101ab610f47565b634e487b7160e01b600052601260045260246000fd5b600082610fa857610fa8610f83565b500490565b634e487b7160e01b600052603260045260246000fd5b600082610fd257610fd2610f83565b500690565b606080825284519082018190526000906020906080840190828801845b828110156110195781516001600160a01b031684529284019290840190600101610ff4565b50505090830194909452506001600160a01b0391909116604090910152919050565b60ff82811682821603908111156101ab576101ab610f47565b60ff818116838216029081169081811461107057611070610f47565b509291505056fea2646970667358221220bbc0d45f12c2989d118645bbc97073a9789495e06edc33487974c472a764fece64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ab2dc3f514610030575b600080fd5b61004361003e366004610e33565b610045565b005b61004e3361013c565b61006b5760405163761c560f60e11b815260040160405180910390fd5b838261007782826101b1565b610094576040516346b4a0e960e01b815260040160405180910390fd5b60006100ae6100a385836101db565b62ffffff19166101ff565b905060006100c162ffffff198316610218565b905060006100d462ffffff19841661024d565b90506100e562ffffff1982166102a5565b61010257604051632af392f960e11b815260040160405180910390fd5b6000806101118b8b86866102b2565b9150915061012f6101278462ffffff1916610500565b8c8484610515565b5050505050505050505050565b602054604051635190bc5360e01b81526001600160a01b0383811660048301526000921690635190bc5390602401602060405180830381865afa158015610187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ab9190610f0f565b92915050565b63ffffffff82166000908152600f6020526040812054821480156101d457508115155b9392505050565b8151600090602084016101f664ffffffffff85168284610827565b95945050505050565b60006101ab61020d83610864565b62ffffff1916610896565b600081600261022f815b62ffffff198416906108c3565b5061024562ffffff198516600060246001610914565b949350505050565b600081600261025b81610222565b5060006102766024601887901c6001600160601b0316610f5d565b9050600061028386610984565b60ff16905061029b62ffffff19871660248484610914565b9695505050505050565b60006101ab826003610999565b600080806102c562ffffff1986166109f8565b905060006102d862ffffff198716610a1a565b905060006102eb62ffffff198716610a3c565b9050801580156102ff575063ffffffff8216155b8015610309575082155b1561037f5730600067ffffffff0000000060208c901b1663ffffffff8b161760408051600081526020810186905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a4600080945094505050506104f7565b600061039561038e8585610a51565b8585610a93565b90508160000361041857306001600160a01b03821667ffffffff0000000060208d901b1663ffffffff8c161760408051600081526020810187905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a49450600093506104f792505050565b61042181610aa2565b610486576040516340c10f1960e01b8152306004820152602481018390526001600160a01b038216906340c10f1990604401600060405180830381600087803b15801561046d57600080fd5b505af1158015610481573d6000803e3d6000fd5b505050505b306001600160a01b03821667ffffffff0000000060208d901b1663ffffffff8c161760408051600081526020810187905267ffffffffffffffff92909216917f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb910160405180910390a49450925050505b94509492505050565b60006101ab62ffffff19831660216020610aaf565b60008481526008602052604081205460ff169081600381111561053a5761053a610f31565b1415801561055a5750600281600381111561055757610557610f31565b14155b1561057857604051638f6bc06f60e01b815260040160405180910390fd5b600081600381111561058c5761058c610f31565b1461059857600361059b565b60015b6000868152600860205260409020805460ff191660018360038111156105c3576105c3610f31565b021790555060008581526009602090815260408083208054825181850281018501909352808352919290919083018282801561062857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161060a575b5050506000898152601e6020908152604080832054601d90925282205494955090936106579350909150610f70565b8251909150811580159061066c575080600114155b1561068a5760405163d3bd901560e01b815260040160405180910390fd5b80156107d057600061069c8287610f99565b905060005b6106ac600184610f5d565b81101561073457816000600a0160008784815181106106cd576106cd610fad565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107279190610f70565b90915550506001016106a1565b5060006107418388610fc3565b61074b9083610f70565b905080600a60008761075e600188610f5d565b8151811061076e5761076e610fad565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546107c89190610f70565b909155505050505b856001600160a01b03168763ffffffff16897f30bf44531c04b96173a40012c90db840a147cf7d50a3e160f5227f1af2faa3a086893360405161081593929190610fd7565b60405180910390a45050505050505050565b6000806108348385610f70565b9050604051811115610844575060005b806000036108595762ffffff199150506101d4565b6101f6858585610bba565b600061086f82610c31565b1561088c576301000000600160d81b038216600160d91b176101ab565b62ffffff196101ab565b60006108a182610c54565b156108bf5760405163252e0d8360e01b815260040160405180910390fd5b5090565b60006108cf8383610c90565b61090d576108dd8360d81c90565b60405163d32c1d3760e01b815264ffffffffff918216600482015290831660248201526044015b60405180910390fd5b5090919050565b60008061092a8660781c6001600160601b031690565b6001600160601b0316905061093e86610cb3565b846109498784610f70565b6109539190610f70565b11156109665762ffffff19915050610245565b6109708582610f70565b905061029b8364ffffffffff168286610827565b60006101ab62ffffff19831660246001610cec565b60008160038111156109ad576109ad610f31565b60ff166109b984610d1c565b60ff161480156101d457508160038111156109d6576109d6610f31565b6109df84610d30565b60038111156109f0576109f0610f31565b149392505050565b6000816001610a0681610222565b5061024562ffffff19851660046020610aaf565b6000816001610a2881610222565b5061024562ffffff19851660006004610cec565b60006101ab62ffffff19831660016020610cec565b60008282604051602001610a7592919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b60006102458484846000610d4b565b60006101ab826000610d84565b60008160ff16600003610ac4575060006101d4565b610ad78460181c6001600160601b031690565b6001600160601b0316610aed60ff841685610f70565b1115610b5557610b068460781c6001600160601b031690565b610b198560181c6001600160601b031690565b6040516378218d2960e01b81526001600160601b039283166004820152911660248201526044810184905260ff83166064820152608401610904565b60208260ff161115610b7a5760405163045df3f960e01b815260040160405180910390fd5b600882026000610b938660781c6001600160601b031690565b6001600160601b031690506000600160ff1b60001984011d91909501511695945050505050565b60006060601883856001600160601b03821682148015610be2575086816001600160601b0316145b610c1b5760405162461bcd60e51b815260206004820152600a602482015269085d1c9d5b98d85d195960b21b6044820152606401610904565b96831b90961790911b90941790931b9392505050565b6000601882901c6001600160601b0316610c4d60416024610f70565b1492915050565b6000610c608260d81c90565b64ffffffffff1664ffffffffff03610c7a57506001919050565b6000610c8583610cb3565b604051109392505050565b60008164ffffffffff16610ca48460d81c90565b64ffffffffff16149392505050565b6000610cc88260181c6001600160601b031690565b610cdb8360781c6001600160601b031690565b016001600160601b03169050919050565b6000610cf982602061103b565b610d04906008611054565b60ff16610d12858585610aaf565b901c949350505050565b60006101ab62ffffff198316826001610cec565b600060d882901c60ff1660038111156101ab576101ab610f31565b600481015460009063ffffffff90811690841603610d6a575082610245565b610d7385610dc3565b546001600160a01b03169050610245565b6001600160a01b038216600090815260068201602052604081205463ffffffff1615610db2575060006101ab565b50506001600160a01b03163b151590565b6000818152600760205260408120600180820154839291600160a01b90910460ff1610156101d45760405163618cca3f60e11b815260040160405180910390fd5b803563ffffffff81168114610e1857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215610e4957600080fd5b610e5285610e04565b9350610e6060208601610e04565b925060408501359150606085013567ffffffffffffffff80821115610e8457600080fd5b818701915087601f830112610e9857600080fd5b813581811115610eaa57610eaa610e1d565b604051601f8201601f19908116603f01168101908382118183101715610ed257610ed2610e1d565b816040528281528a6020848701011115610eeb57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600060208284031215610f2157600080fd5b815180151581146101d457600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156101ab576101ab610f47565b808201808211156101ab576101ab610f47565b634e487b7160e01b600052601260045260246000fd5b600082610fa857610fa8610f83565b500490565b634e487b7160e01b600052603260045260246000fd5b600082610fd257610fd2610f83565b500690565b606080825284519082018190526000906020906080840190828801845b828110156110195781516001600160a01b031684529284019290840190600101610ff4565b50505090830194909452506001600160a01b0391909116604090910152919050565b60ff82811682821603908111156101ab576101ab610f47565b60ff818116838216029081169081811461107057611070610f47565b509291505056fea2646970667358221220bbc0d45f12c2989d118645bbc97073a9789495e06edc33487974c472a764fece64736f6c63430008110033", + "devdoc": { + "events": { + "Receive(uint64,address,address,address,uint256)": { + "params": { + "amount": "The amount of tokens being received", + "liquidityProvider": "The account providing liquidity", + "originAndNonce": "Domain where the transfer originated and the unique identifier for the message from origin to destination, combined in a single field ((origin << 32) & nonce)", + "recipient": "The address receiving the tokens; the original recipient of the transfer", + "token": "The address of the local token contract being received" + } + }, + "Reconciled(bytes32,uint32,address,address[],uint256,address)": { + "params": { + "amount": "- The amount that was provided by the bridge.", + "caller": "- The account that called the function", + "local": "- The local asset that was provided by the bridge.", + "originDomain": "- The originating domain of the transfer.", + "routers": "- The routers that were reimbursed the bridged token, if fast liquidity was provided for the given transfer.", + "transferId": "- The unique identifier of the transfer." + } + } + }, + "kind": "dev", + "methods": { + "handle(uint32,uint32,bytes32,bytes)": { + "params": { + "_message": "The message body.", + "_nonce": "The unique identifier for the message from origin to destination.", + "_origin": "The origin domain.", + "_sender": "The sender address." + } + } + }, + "title": "InboxFacet", + "version": 1 + }, + "userdoc": { + "events": { + "Receive(uint64,address,address,address,uint256)": { + "notice": "emitted when tokens are dispensed to an account on this domain emitted both when fast liquidity is provided, and when the transfer ultimately settles" + }, + "Reconciled(bytes32,uint32,address,address[],uint256,address)": { + "notice": "Emitted when `reconciled` is called by the bridge on the destination domain." + } + }, + "kind": "user", + "methods": { + "handle(uint32,uint32,bytes32,bytes)": { + "notice": "Handles an incoming cross-chain message." + } + }, + "notice": "This is the facet that holds all the functionality needed for Connext's messaging layer to reconcile cross-chain transfers. Authenticated (proven) message data is delivered to the `reconcile` function, where it is parsed to determine the message action. Tokens are credited (representational assets are minted, canonical tokens are unlocked from escrow) if applicable.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/InboxFacet.sol:InboxFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/LPToken.json b/packages/deployments/contracts/deployments/fraxtal/LPToken.json new file mode 100644 index 0000000000..675029a22d --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/LPToken.json @@ -0,0 +1,668 @@ +{ + "address": "0x0296da2Ce82eb3B98eB05925bC5777C7dA0d0F09", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burnFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "initialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x4a3d946e6b171c97d460c6da08dd792af7f6bdcce63efd4b25e5dd10458c2d02", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x0296da2Ce82eb3B98eB05925bC5777C7dA0d0F09", + "transactionIndex": 1, + "gasUsed": "1032260", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x376825de69f4fcc1058b27cac3003137f92c1e60e6065db4fce39607555ede6e", + "transactionHash": "0x4a3d946e6b171c97d460c6da08dd792af7f6bdcce63efd4b25e5dd10458c2d02", + "logs": [], + "blockNumber": 2894840, + "cumulativeGasUsed": "1082822", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Only Swap contracts should initialize and own LPToken contracts.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burnFrom(address,uint256)\":{\"details\":\"only owner can call this burn function\",\"params\":{\"account\":\"address of account from which to burn token\",\"amount\":\"amount of tokens to mint\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"initialize(string,string)\":{\"details\":\"The caller of this function will become the owner. A Swap contract should call this in its initializer function.\",\"params\":{\"name\":\"name of this token\",\"symbol\":\"symbol of this token\"}},\"mint(address,uint256)\":{\"details\":\"only owner can call this mint function\",\"params\":{\"amount\":\"amount of tokens to mint\",\"recipient\":\"address of account to receive the tokens\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"Liquidity Provider Token\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"burnFrom(address,uint256)\":{\"notice\":\"Burns the given amount of LPToken from provided account\"},\"initialize(string,string)\":{\"notice\":\"Initializes this LPToken contract with the given name and symbol\"},\"mint(address,uint256)\":{\"notice\":\"Mints the given amount of LPToken to the recipient.\"}},\"notice\":\"This token is an ERC20 detailed token with added capability to be minted by the owner. It is used to represent user's shares when providing liquidity to swap contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/LPToken.sol\":\"LPToken\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506111b3806100206000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b411461021f578063a457c2d714610227578063a9059cbb1461023a578063dd62ed3e1461024d578063f2fde38b1461026057600080fd5b806370a08231146101c0578063715018a6146101e957806379cc6790146101f15780638da5cb5b1461020457600080fd5b8063313ce567116100de578063313ce56714610176578063395093511461018557806340c10f19146101985780634cd88b76146101ad57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610273565b6040516101259190610d9d565b60405180910390f35b61014161013c366004610e07565b610305565b6040519015158152602001610125565b6035545b604051908152602001610125565b610141610171366004610e31565b61031f565b60405160128152602001610125565b610141610193366004610e07565b610343565b6101ab6101a6366004610e07565b610365565b005b6101416101bb366004610f10565b6103c9565b6101556101ce366004610f74565b6001600160a01b031660009081526033602052604090205490565b6101ab6104f5565b6101ab6101ff366004610e07565b610509565b6065546040516001600160a01b039091168152602001610125565b610118610564565b610141610235366004610e07565b610573565b610141610248366004610e07565b6105ee565b61015561025b366004610f96565b6105fc565b6101ab61026e366004610f74565b610627565b60606036805461028290610fc9565b80601f01602080910402602001604051908101604052809291908181526020018280546102ae90610fc9565b80156102fb5780601f106102d0576101008083540402835291602001916102fb565b820191906000526020600020905b8154815290600101906020018083116102de57829003601f168201915b5050505050905090565b6000336103138185856106a0565b60019150505b92915050565b60003361032d8582856107c4565b61033885858561083e565b506001949350505050565b60003361031381858561035683836105fc565b6103609190611003565b6106a0565b61036d6109f4565b806000036103bb5760405162461bcd60e51b815260206004820152601660248201527504c50546f6b656e3a2063616e6e6f74206d696e7420360541b60448201526064015b60405180910390fd5b6103c58282610a4e565b5050565b60008054610100900460ff16158080156103ea5750600054600160ff909116105b806104045750303b158015610404575060005460ff166001145b6104675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103b2565b6000805460ff19166001179055801561048a576000805461ff0019166101001790555b610492610b1b565b61049c8484610b42565b6104a4610b87565b6001915080156104ee576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5092915050565b6104fd6109f4565b6105076000610bb3565b565b6105116109f4565b8060000361055a5760405162461bcd60e51b815260206004820152601660248201527504c50546f6b656e3a2063616e6e6f74206275726e20360541b60448201526064016103b2565b6103c58282610c05565b60606037805461028290610fc9565b6000338161058182866105fc565b9050838110156105e15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b2565b61033882868684036106a0565b60003361031381858561083e565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61062f6109f4565b6001600160a01b0381166106945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b61069d81610bb3565b50565b6001600160a01b0383166107025760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b2565b6001600160a01b0382166107635760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b2565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006107d084846105fc565b90506000198114610838578181101561082b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103b2565b61083884848484036106a0565b50505050565b6001600160a01b0383166108a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103b2565b6001600160a01b0382166109045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103b2565b61090f838383610d45565b6001600160a01b038316600090815260336020526040902054818110156109875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b2565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109e79086815260200190565b60405180910390a3610838565b6065546001600160a01b031633146105075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b2565b6001600160a01b038216610aa45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103b2565b610ab060008383610d45565b8060356000828254610ac29190611003565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff166105075760405162461bcd60e51b81526004016103b290611024565b600054610100900460ff16610b695760405162461bcd60e51b81526004016103b290611024565b6036610b7583826110bd565b506037610b8282826110bd565b505050565b600054610100900460ff16610bae5760405162461bcd60e51b81526004016103b290611024565b610507335b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103b2565b610c7182600083610d45565b6001600160a01b03821660009081526033602052604090205481811015610ce55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103b2565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b306001600160a01b03831603610b825760405162461bcd60e51b815260206004820152601e60248201527f4c50546f6b656e3a2063616e6e6f742073656e6420746f20697473656c66000060448201526064016103b2565b600060208083528351808285015260005b81811015610dca57858101830151858201604001528201610dae565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610e0257600080fd5b919050565b60008060408385031215610e1a57600080fd5b610e2383610deb565b946020939093013593505050565b600080600060608486031215610e4657600080fd5b610e4f84610deb565b9250610e5d60208501610deb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610e9457600080fd5b813567ffffffffffffffff80821115610eaf57610eaf610e6d565b604051601f8301601f19908116603f01168101908282118183101715610ed757610ed7610e6d565b81604052838152866020858801011115610ef057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610f2357600080fd5b823567ffffffffffffffff80821115610f3b57600080fd5b610f4786838701610e83565b93506020850135915080821115610f5d57600080fd5b50610f6a85828601610e83565b9150509250929050565b600060208284031215610f8657600080fd5b610f8f82610deb565b9392505050565b60008060408385031215610fa957600080fd5b610fb283610deb565b9150610fc060208401610deb565b90509250929050565b600181811c90821680610fdd57607f821691505b602082108103610ffd57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561031957634e487b7160e01b600052601160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610b8257600081815260208120601f850160051c810160208610156110965750805b601f850160051c820191505b818110156110b5578281556001016110a2565b505050505050565b815167ffffffffffffffff8111156110d7576110d7610e6d565b6110eb816110e58454610fc9565b8461106f565b602080601f83116001811461112057600084156111085750858301515b600019600386901b1c1916600185901b1785556110b5565b600085815260208120601f198616915b8281101561114f57888601518255948401946001909101908401611130565b508582101561116d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122016715179f47a5579a7f4ffe57608078db5b76af23d867ef61df8000244e74e3b64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806395d89b411161007157806395d89b411461021f578063a457c2d714610227578063a9059cbb1461023a578063dd62ed3e1461024d578063f2fde38b1461026057600080fd5b806370a08231146101c0578063715018a6146101e957806379cc6790146101f15780638da5cb5b1461020457600080fd5b8063313ce567116100de578063313ce56714610176578063395093511461018557806340c10f19146101985780634cd88b76146101ad57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610273565b6040516101259190610d9d565b60405180910390f35b61014161013c366004610e07565b610305565b6040519015158152602001610125565b6035545b604051908152602001610125565b610141610171366004610e31565b61031f565b60405160128152602001610125565b610141610193366004610e07565b610343565b6101ab6101a6366004610e07565b610365565b005b6101416101bb366004610f10565b6103c9565b6101556101ce366004610f74565b6001600160a01b031660009081526033602052604090205490565b6101ab6104f5565b6101ab6101ff366004610e07565b610509565b6065546040516001600160a01b039091168152602001610125565b610118610564565b610141610235366004610e07565b610573565b610141610248366004610e07565b6105ee565b61015561025b366004610f96565b6105fc565b6101ab61026e366004610f74565b610627565b60606036805461028290610fc9565b80601f01602080910402602001604051908101604052809291908181526020018280546102ae90610fc9565b80156102fb5780601f106102d0576101008083540402835291602001916102fb565b820191906000526020600020905b8154815290600101906020018083116102de57829003601f168201915b5050505050905090565b6000336103138185856106a0565b60019150505b92915050565b60003361032d8582856107c4565b61033885858561083e565b506001949350505050565b60003361031381858561035683836105fc565b6103609190611003565b6106a0565b61036d6109f4565b806000036103bb5760405162461bcd60e51b815260206004820152601660248201527504c50546f6b656e3a2063616e6e6f74206d696e7420360541b60448201526064015b60405180910390fd5b6103c58282610a4e565b5050565b60008054610100900460ff16158080156103ea5750600054600160ff909116105b806104045750303b158015610404575060005460ff166001145b6104675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103b2565b6000805460ff19166001179055801561048a576000805461ff0019166101001790555b610492610b1b565b61049c8484610b42565b6104a4610b87565b6001915080156104ee576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5092915050565b6104fd6109f4565b6105076000610bb3565b565b6105116109f4565b8060000361055a5760405162461bcd60e51b815260206004820152601660248201527504c50546f6b656e3a2063616e6e6f74206275726e20360541b60448201526064016103b2565b6103c58282610c05565b60606037805461028290610fc9565b6000338161058182866105fc565b9050838110156105e15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103b2565b61033882868684036106a0565b60003361031381858561083e565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b61062f6109f4565b6001600160a01b0381166106945760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b2565b61069d81610bb3565b50565b6001600160a01b0383166107025760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103b2565b6001600160a01b0382166107635760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103b2565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006107d084846105fc565b90506000198114610838578181101561082b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103b2565b61083884848484036106a0565b50505050565b6001600160a01b0383166108a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103b2565b6001600160a01b0382166109045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103b2565b61090f838383610d45565b6001600160a01b038316600090815260336020526040902054818110156109875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103b2565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109e79086815260200190565b60405180910390a3610838565b6065546001600160a01b031633146105075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b2565b6001600160a01b038216610aa45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103b2565b610ab060008383610d45565b8060356000828254610ac29190611003565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600054610100900460ff166105075760405162461bcd60e51b81526004016103b290611024565b600054610100900460ff16610b695760405162461bcd60e51b81526004016103b290611024565b6036610b7583826110bd565b506037610b8282826110bd565b505050565b600054610100900460ff16610bae5760405162461bcd60e51b81526004016103b290611024565b610507335b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610c655760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103b2565b610c7182600083610d45565b6001600160a01b03821660009081526033602052604090205481811015610ce55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103b2565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b306001600160a01b03831603610b825760405162461bcd60e51b815260206004820152601e60248201527f4c50546f6b656e3a2063616e6e6f742073656e6420746f20697473656c66000060448201526064016103b2565b600060208083528351808285015260005b81811015610dca57858101830151858201604001528201610dae565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610e0257600080fd5b919050565b60008060408385031215610e1a57600080fd5b610e2383610deb565b946020939093013593505050565b600080600060608486031215610e4657600080fd5b610e4f84610deb565b9250610e5d60208501610deb565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610e9457600080fd5b813567ffffffffffffffff80821115610eaf57610eaf610e6d565b604051601f8301601f19908116603f01168101908282118183101715610ed757610ed7610e6d565b81604052838152866020858801011115610ef057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610f2357600080fd5b823567ffffffffffffffff80821115610f3b57600080fd5b610f4786838701610e83565b93506020850135915080821115610f5d57600080fd5b50610f6a85828601610e83565b9150509250929050565b600060208284031215610f8657600080fd5b610f8f82610deb565b9392505050565b60008060408385031215610fa957600080fd5b610fb283610deb565b9150610fc060208401610deb565b90509250929050565b600181811c90821680610fdd57607f821691505b602082108103610ffd57634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561031957634e487b7160e01b600052601160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f821115610b8257600081815260208120601f850160051c810160208610156110965750805b601f850160051c820191505b818110156110b5578281556001016110a2565b505050505050565b815167ffffffffffffffff8111156110d7576110d7610e6d565b6110eb816110e58454610fc9565b8461106f565b602080601f83116001811461112057600084156111085750858301515b600019600386901b1c1916600185901b1785556110b5565b600085815260208120601f198616915b8281101561114f57888601518255948401946001909101908401611130565b508582101561116d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea264697066735822122016715179f47a5579a7f4ffe57608078db5b76af23d867ef61df8000244e74e3b64736f6c63430008110033", + "devdoc": { + "details": "Only Swap contracts should initialize and own LPToken contracts.", + "kind": "dev", + "methods": { + "allowance(address,address)": { + "details": "See {IERC20-allowance}." + }, + "approve(address,uint256)": { + "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." + }, + "balanceOf(address)": { + "details": "See {IERC20-balanceOf}." + }, + "burnFrom(address,uint256)": { + "details": "only owner can call this burn function", + "params": { + "account": "address of account from which to burn token", + "amount": "amount of tokens to mint" + } + }, + "decimals()": { + "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." + }, + "decreaseAllowance(address,uint256)": { + "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." + }, + "increaseAllowance(address,uint256)": { + "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address." + }, + "initialize(string,string)": { + "details": "The caller of this function will become the owner. A Swap contract should call this in its initializer function.", + "params": { + "name": "name of this token", + "symbol": "symbol of this token" + } + }, + "mint(address,uint256)": { + "details": "only owner can call this mint function", + "params": { + "amount": "amount of tokens to mint", + "recipient": "address of account to receive the tokens" + } + }, + "name()": { + "details": "Returns the name of the token." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "symbol()": { + "details": "Returns the symbol of the token, usually a shorter version of the name." + }, + "totalSupply()": { + "details": "See {IERC20-totalSupply}." + }, + "transfer(address,uint256)": { + "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "title": "Liquidity Provider Token", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "burnFrom(address,uint256)": { + "notice": "Burns the given amount of LPToken from provided account" + }, + "initialize(string,string)": { + "notice": "Initializes this LPToken contract with the given name and symbol" + }, + "mint(address,uint256)": { + "notice": "Mints the given amount of LPToken to the recipient." + } + }, + "notice": "This token is an ERC20 detailed token with added capability to be minted by the owner. It is used to represent user's shares when providing liquidity to swap contracts.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 224, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 227, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 1690, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 605, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 611, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 613, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256" + }, + { + "astId": 615, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage" + }, + { + "astId": 617, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage" + }, + { + "astId": 1197, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage" + }, + { + "astId": 96, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "_owner", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 216, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 15568, + "contract": "contracts/core/connext/helpers/LPToken.sol:LPToken", + "label": "__GAP", + "offset": 0, + "slot": "151", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)45_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerStaging.json b/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerStaging.json new file mode 100644 index 0000000000..c99a659221 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerStaging.json @@ -0,0 +1,842 @@ +{ + "address": "0xbA7A99409aC88E15A1945A8A8a047Fe51BBf9D95", + "abi": [ + { + "inputs": [], + "name": "MerkleLib__insert_treeIsFull", + "type": "error" + }, + { + "inputs": [], + "name": "MerkleTreeManager__renounceOwnership_prohibited", + "type": "error" + }, + { + "inputs": [], + "name": "MerkleTreeManager__setArborist_alreadyArborist", + "type": "error" + }, + { + "inputs": [], + "name": "MerkleTreeManager__setArborist_zeroAddress", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previous", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + } + ], + "name": "ArboristUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "count", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "LeafInserted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "count", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32[]", + "name": "leaves", + "type": "bytes32[]" + } + ], + "name": "LeavesInserted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "arborist", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "branch", + "outputs": [ + { + "internalType": "bytes32[32]", + "name": "", + "type": "bytes32[32]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "count", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "incrementNonce", + "outputs": [ + { + "internalType": "uint32", + "name": "_nonce", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_arborist", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "leaf", + "type": "bytes32" + } + ], + "name": "insert", + "outputs": [ + { + "internalType": "bytes32", + "name": "_root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_count", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "_leaves", + "type": "bytes32[]" + } + ], + "name": "insert", + "outputs": [ + { + "internalType": "bytes32", + "name": "_root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_count", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "leaves", + "outputs": [ + { + "internalType": "enum MerkleTreeManager.LeafStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_leaf", + "type": "bytes32" + } + ], + "name": "markAsProcessed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_leaf", + "type": "bytes32" + } + ], + "name": "markAsProven", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "root", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rootAndCount", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newArborist", + "type": "address" + } + ], + "name": "setArborist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tree", + "outputs": [ + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x8b33f4cb4870f7e5da066892e4b5d000a3a84b579067daa7e24cc42d9d07c925", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0xbA7A99409aC88E15A1945A8A8a047Fe51BBf9D95", + "transactionIndex": 1, + "gasUsed": "2159810", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6ccbf424a60d64936edf6426529c91661e230ef84ba111c47fe34c691d424a11", + "transactionHash": "0x8b33f4cb4870f7e5da066892e4b5d000a3a84b579067daa7e24cc42d9d07c925", + "logs": [], + "blockNumber": 2889678, + "cumulativeGasUsed": "2210372", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MerkleLib__insert_treeIsFull\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleTreeManager__renounceOwnership_prohibited\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleTreeManager__setArborist_alreadyArborist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MerkleTreeManager__setArborist_zeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"}],\"name\":\"ArboristUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"}],\"name\":\"LeafInserted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"leaves\",\"type\":\"bytes32[]\"}],\"name\":\"LeavesInserted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arborist\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"branch\",\"outputs\":[{\"internalType\":\"bytes32[32]\",\"name\":\"\",\"type\":\"bytes32[32]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"incrementNonce\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"_nonce\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_arborist\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"leaf\",\"type\":\"bytes32\"}],\"name\":\"insert\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"_root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_leaves\",\"type\":\"bytes32[]\"}],\"name\":\"insert\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"_root\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"leaves\",\"outputs\":[{\"internalType\":\"enum MerkleTreeManager.LeafStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_leaf\",\"type\":\"bytes32\"}],\"name\":\"markAsProcessed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_leaf\",\"type\":\"bytes32\"}],\"name\":\"markAsProven\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"root\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootAndCount\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newArborist\",\"type\":\"address\"}],\"name\":\"setArborist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tree\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\",\"kind\":\"dev\",\"methods\":{\"incrementNonce(uint32)\":{\"params\":{\"_domain\":\"The domain the nonce will be used for\"},\"returns\":{\"_nonce\":\"The incremented nonce\"}},\"insert(bytes32)\":{\"params\":{\"leaf\":\"The leaf to be inserted into the tree.\"},\"returns\":{\"_count\":\"Current node count (i.e. number of indices) AFTER the insertion of the new leaf, provided for convenience.\",\"_root\":\"Current root for convenience.\"}},\"insert(bytes32[])\":{\"params\":{\"_leaves\":\"The leaves to be inserted into the tree.\"},\"returns\":{\"_count\":\"Current node count (i.e. number of indices) AFTER the insertion of the new leaf, provided for convenience.\",\"_root\":\"Current root for convenience.\"}},\"markAsProcessed(bytes32)\":{\"params\":{\"_leaf\":\"The leaf to mark as proven\"}},\"markAsProven(bytes32)\":{\"params\":{\"_leaf\":\"The leaf to mark as proven\"}},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as there is a possibility the arborist may change.\"},\"setArborist(address)\":{\"params\":{\"newArborist\":\"The new address to set as the current arborist.\"}}},\"stateVariables\":{\"arborist\":{\"details\":\"This could be the root manager contract or a spoke connector contract, for example.\"}},\"title\":\"MerkleTreeManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"arborist()\":{\"notice\":\"The arborist contract that has permission to write to this tree.\"},\"branch()\":{\"notice\":\"Returns the current branch.\"},\"count()\":{\"notice\":\"Returns the number of inserted leaves in the tree (current index).\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"incrementNonce(uint32)\":{\"notice\":\"Used to increment nonce\"},\"insert(bytes32)\":{\"notice\":\"Inserts the given leaf into the tree.\"},\"insert(bytes32[])\":{\"notice\":\"Inserts the given leaves into the tree.\"},\"leaves(bytes32)\":{\"notice\":\"The leaves that are proven already\"},\"markAsProcessed(bytes32)\":{\"notice\":\"Used to track processed leaves\"},\"markAsProven(bytes32)\":{\"notice\":\"Used to track proven leaves\"},\"nonces(uint32)\":{\"notice\":\"domain => next available nonce for the domain.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"root()\":{\"notice\":\"Calculates and returns the current root.\"},\"rootAndCount()\":{\"notice\":\"Convenience getter: returns the root and count.\"},\"setArborist(address)\":{\"notice\":\"Method for the current arborist to assign write permissions to a new arborist.\"},\"tree()\":{\"notice\":\"Core data structure with which this contract is tasked with keeping custody. Writable only by the designated arborist.\"}},\"notice\":\"Contains a Merkle tree instance and exposes read/write functions for the tree.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/MerkleTreeManager.sol\":\"MerkleTreeManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n // ========== Custom Errors ===========\\n\\n error MerkleTreeManager__renounceOwnership_prohibited();\\n error MerkleTreeManager__setArborist_zeroAddress();\\n error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n // ============ Events ============\\n\\n event ArboristUpdated(address previous, address updated);\\n\\n event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n // ============ Structs ============\\n\\n // Status of Message:\\n // 0 - None - message has not been proven or processed\\n // 1 - Proven - message inclusion proof has been validated\\n // 2 - Processed - message has been dispatched to recipient\\n enum LeafStatus {\\n None,\\n Proven,\\n Processed\\n }\\n\\n // ============ Libraries ============\\n\\n using MerkleLib for MerkleLib.Tree;\\n\\n // ============ Public Storage ============\\n\\n /**\\n * @notice Core data structure with which this contract is tasked with keeping custody.\\n * Writable only by the designated arborist.\\n */\\n MerkleLib.Tree public tree;\\n\\n /**\\n * @notice The arborist contract that has permission to write to this tree.\\n * @dev This could be the root manager contract or a spoke connector contract, for example.\\n */\\n address public arborist;\\n\\n /**\\n * @notice The leaves that are proven already\\n */\\n mapping(bytes32 => LeafStatus) public leaves;\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n mapping(uint32 => uint32) public nonces;\\n\\n // ============ Modifiers ============\\n\\n modifier onlyArborist() {\\n require(arborist == msg.sender, \\\"!arborist\\\");\\n _;\\n }\\n\\n // ============ Getters ============\\n\\n /**\\n * @notice Returns the current branch.\\n */\\n function branch() public view returns (bytes32[32] memory) {\\n return tree.branch;\\n }\\n\\n /**\\n * @notice Calculates and returns the current root.\\n */\\n function root() public view returns (bytes32) {\\n return tree.root();\\n }\\n\\n /**\\n * @notice Returns the number of inserted leaves in the tree (current index).\\n */\\n function count() public view returns (uint256) {\\n return tree.count;\\n }\\n\\n /**\\n * @notice Convenience getter: returns the root and count.\\n */\\n function rootAndCount() public view returns (bytes32, uint256) {\\n return (tree.root(), tree.count);\\n }\\n\\n // ======== Initializer =========\\n\\n function initialize(address _arborist) public initializer {\\n __MerkleTreeManager_init(_arborist);\\n __ProposedOwnable_init();\\n }\\n\\n /**\\n * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n */\\n function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n __MerkleTreeManager_init_unchained(_arborist);\\n }\\n\\n function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n arborist = _arborist;\\n }\\n\\n // ============ Admin Functions ==============\\n\\n /**\\n * @notice Method for the current arborist to assign write permissions to a new arborist.\\n * @param newArborist The new address to set as the current arborist.\\n */\\n function setArborist(address newArborist) external onlyOwner {\\n if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n address current = arborist;\\n if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n // Emit updated event\\n emit ArboristUpdated(current, newArborist);\\n\\n arborist = newArborist;\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as there is a possibility the\\n * arborist may change.\\n */\\n function renounceOwnership() public virtual override onlyOwner {\\n revert MerkleTreeManager__renounceOwnership_prohibited();\\n }\\n\\n // ========= Public Functions =========\\n\\n /**\\n * @notice Used to increment nonce\\n * @param _domain The domain the nonce will be used for\\n * @return _nonce The incremented nonce\\n */\\n function incrementNonce(uint32 _domain) public onlyArborist returns (uint32 _nonce) {\\n _nonce = nonces[_domain]++;\\n }\\n\\n /**\\n * @notice Used to track proven leaves\\n * @param _leaf The leaf to mark as proven\\n */\\n function markAsProven(bytes32 _leaf) public onlyArborist {\\n require(leaves[_leaf] == LeafStatus.None, \\\"!empty\\\");\\n leaves[_leaf] = LeafStatus.Proven;\\n }\\n\\n /**\\n * @notice Used to track processed leaves\\n * @param _leaf The leaf to mark as proven\\n */\\n function markAsProcessed(bytes32 _leaf) public onlyArborist {\\n require(leaves[_leaf] == LeafStatus.Proven, \\\"!proven\\\");\\n leaves[_leaf] = LeafStatus.Processed;\\n }\\n\\n /**\\n * @notice Inserts the given leaves into the tree.\\n * @param _leaves The leaves to be inserted into the tree.\\n * @return _root Current root for convenience.\\n * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n * provided for convenience.\\n */\\n function insert(bytes32[] memory _leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n MerkleLib.Tree memory _tree = tree;\\n\\n uint256 leafCount = _leaves.length;\\n for (uint256 i; i < leafCount; ) {\\n // Insert the new node (using in-memory method).\\n _tree = _tree.insert(_leaves[i]);\\n unchecked {\\n ++i;\\n }\\n }\\n // Write the newly updated tree to storage.\\n tree = _tree;\\n\\n // Get return details for convenience.\\n _count = _tree.count;\\n // NOTE: Root calculation method currently reads from storage only.\\n _root = tree.root();\\n\\n emit LeavesInserted(_root, _count, _leaves);\\n }\\n\\n /**\\n * @notice Inserts the given leaf into the tree.\\n * @param leaf The leaf to be inserted into the tree.\\n * @return _root Current root for convenience.\\n * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n * provided for convenience.\\n */\\n function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n // Insert the new node.\\n tree = tree.insert(leaf);\\n _count = tree.count;\\n _root = tree.root();\\n\\n emit LeafInserted(_root, _count, leaf);\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[46] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6c85e8e6df2192fd4d8099efbbb8b3ff40211b777174a99abe5e6d60f9529a3c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n // ========== Custom Errors ===========\\n\\n error MerkleLib__insert_treeIsFull();\\n\\n // ============ Constants =============\\n\\n uint256 internal constant TREE_DEPTH = 32;\\n uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n /**\\n * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n * Used to shortcut calculation in root calculation methods below.\\n */\\n bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n // ============= Structs ==============\\n\\n /**\\n * @notice Struct representing incremental merkle tree. Contains current\\n * branch and the number of inserted leaves in the tree.\\n **/\\n struct Tree {\\n bytes32[TREE_DEPTH] branch;\\n uint256 count;\\n }\\n\\n // ========= Write Methods =========\\n\\n /**\\n * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n * returns an updated version of that tree.\\n * @dev Reverts if the tree is already full.\\n * @param node Element to insert into tree.\\n * @return Tree Updated tree.\\n **/\\n function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n uint256 size = ++tree.count;\\n if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n // branch along the way.\\n for (uint256 i; i < TREE_DEPTH; ) {\\n // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n if ((size & 1) == 1) {\\n // If i > 0, then this node will be a hash of the original node with every layer up\\n // until layer `i`.\\n tree.branch[i] = node;\\n return tree;\\n }\\n // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n node = keccak256(abi.encodePacked(tree.branch[i], node));\\n size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n unchecked {\\n ++i;\\n }\\n }\\n // As the loop should always end prematurely with the `return` statement, this code should\\n // be unreachable. We revert here just to be safe.\\n revert MerkleLib__insert_treeIsFull();\\n }\\n\\n // ========= Read Methods =========\\n\\n /**\\n * @notice Calculates and returns tree's current root.\\n * @return _current bytes32 root.\\n **/\\n function root(Tree storage tree) internal view returns (bytes32 _current) {\\n uint256 _index = tree.count;\\n\\n if (_index == 0) {\\n return Z_32;\\n }\\n\\n uint256 i;\\n assembly {\\n let TREE_SLOT := tree.slot\\n\\n for {\\n\\n } true {\\n\\n } {\\n for {\\n\\n } true {\\n\\n } {\\n if and(_index, 1) {\\n mstore(0, sload(TREE_SLOT))\\n mstore(0x20, Z_0)\\n _current := keccak256(0, 0x40)\\n break\\n }\\n\\n if and(_index, shl(1, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 1)))\\n mstore(0x20, Z_1)\\n _current := keccak256(0, 0x40)\\n i := 1\\n break\\n }\\n\\n if and(_index, shl(2, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 2)))\\n mstore(0x20, Z_2)\\n _current := keccak256(0, 0x40)\\n i := 2\\n break\\n }\\n\\n if and(_index, shl(3, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 3)))\\n mstore(0x20, Z_3)\\n _current := keccak256(0, 0x40)\\n i := 3\\n break\\n }\\n\\n if and(_index, shl(4, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 4)))\\n mstore(0x20, Z_4)\\n _current := keccak256(0, 0x40)\\n i := 4\\n break\\n }\\n\\n if and(_index, shl(5, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 5)))\\n mstore(0x20, Z_5)\\n _current := keccak256(0, 0x40)\\n i := 5\\n break\\n }\\n\\n if and(_index, shl(6, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 6)))\\n mstore(0x20, Z_6)\\n _current := keccak256(0, 0x40)\\n i := 6\\n break\\n }\\n\\n if and(_index, shl(7, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 7)))\\n mstore(0x20, Z_7)\\n _current := keccak256(0, 0x40)\\n i := 7\\n break\\n }\\n\\n if and(_index, shl(8, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 8)))\\n mstore(0x20, Z_8)\\n _current := keccak256(0, 0x40)\\n i := 8\\n break\\n }\\n\\n if and(_index, shl(9, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 9)))\\n mstore(0x20, Z_9)\\n _current := keccak256(0, 0x40)\\n i := 9\\n break\\n }\\n\\n if and(_index, shl(10, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 10)))\\n mstore(0x20, Z_10)\\n _current := keccak256(0, 0x40)\\n i := 10\\n break\\n }\\n\\n if and(_index, shl(11, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 11)))\\n mstore(0x20, Z_11)\\n _current := keccak256(0, 0x40)\\n i := 11\\n break\\n }\\n\\n if and(_index, shl(12, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 12)))\\n mstore(0x20, Z_12)\\n _current := keccak256(0, 0x40)\\n i := 12\\n break\\n }\\n\\n if and(_index, shl(13, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 13)))\\n mstore(0x20, Z_13)\\n _current := keccak256(0, 0x40)\\n i := 13\\n break\\n }\\n\\n if and(_index, shl(14, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 14)))\\n mstore(0x20, Z_14)\\n _current := keccak256(0, 0x40)\\n i := 14\\n break\\n }\\n\\n if and(_index, shl(15, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 15)))\\n mstore(0x20, Z_15)\\n _current := keccak256(0, 0x40)\\n i := 15\\n break\\n }\\n\\n if and(_index, shl(16, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 16)))\\n mstore(0x20, Z_16)\\n _current := keccak256(0, 0x40)\\n i := 16\\n break\\n }\\n\\n if and(_index, shl(17, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 17)))\\n mstore(0x20, Z_17)\\n _current := keccak256(0, 0x40)\\n i := 17\\n break\\n }\\n\\n if and(_index, shl(18, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 18)))\\n mstore(0x20, Z_18)\\n _current := keccak256(0, 0x40)\\n i := 18\\n break\\n }\\n\\n if and(_index, shl(19, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 19)))\\n mstore(0x20, Z_19)\\n _current := keccak256(0, 0x40)\\n i := 19\\n break\\n }\\n\\n if and(_index, shl(20, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 20)))\\n mstore(0x20, Z_20)\\n _current := keccak256(0, 0x40)\\n i := 20\\n break\\n }\\n\\n if and(_index, shl(21, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 21)))\\n mstore(0x20, Z_21)\\n _current := keccak256(0, 0x40)\\n i := 21\\n break\\n }\\n\\n if and(_index, shl(22, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 22)))\\n mstore(0x20, Z_22)\\n _current := keccak256(0, 0x40)\\n i := 22\\n break\\n }\\n\\n if and(_index, shl(23, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 23)))\\n mstore(0x20, Z_23)\\n _current := keccak256(0, 0x40)\\n i := 23\\n break\\n }\\n\\n if and(_index, shl(24, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 24)))\\n mstore(0x20, Z_24)\\n _current := keccak256(0, 0x40)\\n i := 24\\n break\\n }\\n\\n if and(_index, shl(25, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 25)))\\n mstore(0x20, Z_25)\\n _current := keccak256(0, 0x40)\\n i := 25\\n break\\n }\\n\\n if and(_index, shl(26, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 26)))\\n mstore(0x20, Z_26)\\n _current := keccak256(0, 0x40)\\n i := 26\\n break\\n }\\n\\n if and(_index, shl(27, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 27)))\\n mstore(0x20, Z_27)\\n _current := keccak256(0, 0x40)\\n i := 27\\n break\\n }\\n\\n if and(_index, shl(28, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 28)))\\n mstore(0x20, Z_28)\\n _current := keccak256(0, 0x40)\\n i := 28\\n break\\n }\\n\\n if and(_index, shl(29, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 29)))\\n mstore(0x20, Z_29)\\n _current := keccak256(0, 0x40)\\n i := 29\\n break\\n }\\n\\n if and(_index, shl(30, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 30)))\\n mstore(0x20, Z_30)\\n _current := keccak256(0, 0x40)\\n i := 30\\n break\\n }\\n\\n if and(_index, shl(31, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 31)))\\n mstore(0x20, Z_31)\\n _current := keccak256(0, 0x40)\\n i := 31\\n break\\n }\\n\\n _current := Z_32\\n i := 32\\n break\\n }\\n\\n if gt(i, 30) {\\n break\\n }\\n\\n {\\n if lt(i, 1) {\\n switch and(_index, shl(1, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_1)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 1)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 2) {\\n switch and(_index, shl(2, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_2)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 2)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 3) {\\n switch and(_index, shl(3, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_3)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 3)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 4) {\\n switch and(_index, shl(4, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_4)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 4)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 5) {\\n switch and(_index, shl(5, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_5)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 5)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 6) {\\n switch and(_index, shl(6, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_6)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 6)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 7) {\\n switch and(_index, shl(7, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_7)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 7)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 8) {\\n switch and(_index, shl(8, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_8)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 8)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 9) {\\n switch and(_index, shl(9, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_9)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 9)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 10) {\\n switch and(_index, shl(10, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_10)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 10)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 11) {\\n switch and(_index, shl(11, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_11)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 11)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 12) {\\n switch and(_index, shl(12, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_12)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 12)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 13) {\\n switch and(_index, shl(13, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_13)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 13)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 14) {\\n switch and(_index, shl(14, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_14)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 14)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 15) {\\n switch and(_index, shl(15, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_15)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 15)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 16) {\\n switch and(_index, shl(16, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_16)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 16)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 17) {\\n switch and(_index, shl(17, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_17)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 17)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 18) {\\n switch and(_index, shl(18, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_18)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 18)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 19) {\\n switch and(_index, shl(19, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_19)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 19)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 20) {\\n switch and(_index, shl(20, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_20)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 20)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 21) {\\n switch and(_index, shl(21, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_21)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 21)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 22) {\\n switch and(_index, shl(22, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_22)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 22)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 23) {\\n switch and(_index, shl(23, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_23)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 23)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 24) {\\n switch and(_index, shl(24, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_24)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 24)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 25) {\\n switch and(_index, shl(25, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_25)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 25)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 26) {\\n switch and(_index, shl(26, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_26)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 26)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 27) {\\n switch and(_index, shl(27, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_27)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 27)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 28) {\\n switch and(_index, shl(28, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_28)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 28)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 29) {\\n switch and(_index, shl(29, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_29)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 29)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 30) {\\n switch and(_index, shl(30, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_30)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 30)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 31) {\\n switch and(_index, shl(31, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_31)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 31)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n }\\n\\n break\\n }\\n }\\n }\\n\\n /**\\n * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n * a merkle branch, and the index of `_item` in the tree.\\n * @param _item Merkle leaf\\n * @param _branch Merkle proof\\n * @param _index Index of `_item` in tree\\n * @return _current Calculated merkle root\\n **/\\n function branchRoot(\\n bytes32 _item,\\n bytes32[TREE_DEPTH] memory _branch,\\n uint256 _index\\n ) internal pure returns (bytes32 _current) {\\n assembly {\\n _current := _item\\n let BRANCH_DATA_OFFSET := _branch\\n let f\\n\\n f := shl(5, and(_index, 1))\\n mstore(f, _current)\\n mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(1, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(2, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(3, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(4, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(5, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(6, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(7, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(8, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(9, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(10, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(11, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(12, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(13, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(14, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(15, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(16, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(17, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(18, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(19, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(20, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(21, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(22, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(23, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(24, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(25, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(26, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(27, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(28, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(29, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(30, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(31, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n _current := keccak256(0, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n // ========== Custom Errors ===========\\n\\n error ProposedOwnable__onlyOwner_notOwner();\\n error ProposedOwnable__onlyProposed_notProposedOwner();\\n error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n error ProposedOwnable__proposeNewOwner_invalidProposal();\\n error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n error ProposedOwnable__renounceOwnership_noProposal();\\n error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // ============ Properties ============\\n\\n address private _owner;\\n\\n address private _proposed;\\n uint256 private _proposedOwnershipTimestamp;\\n\\n uint256 private constant _delay = 7 days;\\n\\n // ======== Getters =========\\n\\n /**\\n * @notice Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposed() public view virtual returns (address) {\\n return _proposed;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposedTimestamp() public view virtual returns (uint256) {\\n return _proposedOwnershipTimestamp;\\n }\\n\\n /**\\n * @notice Returns the delay period before a new owner can be accepted.\\n */\\n function delay() public view virtual returns (uint256) {\\n return _delay;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if the ownership delay has not elapsed\\n */\\n modifier ownershipDelayElapsed() {\\n // Ensure delay has elapsed\\n if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n _;\\n }\\n\\n /**\\n * @notice Indicates if the ownership has been renounced() by\\n * checking if current owner is address(0)\\n */\\n function renounced() public view returns (bool) {\\n return _owner == address(0);\\n }\\n\\n // ======== External =========\\n\\n /**\\n * @notice Sets the timestamp for an owner to be proposed, and sets the\\n * newly proposed owner as step 1 in a 2-step process\\n */\\n function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n // Contract as source of truth\\n if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n // Sanity check: reasonable proposal\\n if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n _setProposed(newlyProposed);\\n }\\n\\n /**\\n * @notice Renounces ownership of the contract after a delay\\n */\\n function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n // Ensure there has been a proposal cycle started\\n if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n // Require proposed is set to 0\\n if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(address(0));\\n }\\n\\n /**\\n * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n // NOTE: no need to check if _owner == _proposed, because the _proposed\\n // is 0-d out and this check is implicitly enforced by modifier\\n\\n // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n // the only time this would happen is if the _proposed was never\\n // set (will fail from modifier) or if the owner == _proposed (checked\\n // above)\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(_proposed);\\n }\\n\\n // ======== Internal =========\\n\\n function _setOwner(address newOwner) internal {\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n delete _proposedOwnershipTimestamp;\\n delete _proposed;\\n }\\n\\n function _setProposed(address newlyProposed) private {\\n _proposedOwnershipTimestamp = block.timestamp;\\n _proposed = newlyProposed;\\n emit OwnershipProposed(newlyProposed);\\n }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n /**\\n * @dev Initializes the contract setting the deployer as the initial\\n */\\n function __ProposedOwnable_init() internal onlyInitializing {\\n __ProposedOwnable_init_unchained();\\n }\\n\\n function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n _setOwner(msg.sender);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n /**\\n * @dev This emits when change in ownership of a contract is proposed.\\n */\\n event OwnershipProposed(address indexed proposedOwner);\\n\\n /**\\n * @dev This emits when ownership of a contract changes.\\n */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @notice Get the address of the owner\\n * @return owner_ The address of the owner.\\n */\\n function owner() external view returns (address owner_);\\n\\n /**\\n * @notice Get the address of the proposed owner\\n * @return proposed_ The address of the proposed.\\n */\\n function proposed() external view returns (address proposed_);\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n * @param newlyProposed The proposed new owner of the contract\\n */\\n function proposeNewOwner(address newlyProposed) external;\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n */\\n function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50612620806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638da5cb5b116100c3578063c5b350df1161007c578063c5b350df146102f3578063c9b0a6de146102fb578063d1851c9214610303578063d232c22014610314578063ebf0c7171461033d578063fd54b2281461034557600080fd5b80638da5cb5b1461026a57806398fae8e914610281578063b1f8100d14610294578063b61f1030146102a7578063b95a2001146102ba578063c4d66de8146102e057600080fd5b806331d0913c1161011557806331d0913c146101fe57806334a55ee6146102295780633cf52ffb1461023c5780634b72d0d4146102445780636a42b8f814610259578063715018a61461026257600080fd5b806306661abd146101525780630c132ab514610169578063151bcd2c146101915780631b373a98146101c15780632d287e43146101d6575b600080fd5b6052545b6040519081526020015b60405180910390f35b61017c610177366004612205565b61034f565b60405163ffffffff9091168152602001610160565b6101b461019f366004612232565b60546020526000908152604090205460ff1681565b6040516101609190612261565b6101d46101cf366004612289565b6103d0565b005b6101e96101e4366004612232565b6104be565b60408051928352602083019190915201610160565b605354610211906001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101e96102373660046122c8565b6105ae565b600254610156565b61024c6106d9565b6040516101609190612386565b62093a80610156565b6101d4610715565b6000546201000090046001600160a01b0316610211565b6101d461028f366004612232565b61075f565b6101d46102a2366004612289565b610805565b6101d46102b5366004612232565b6108b2565b61017c6102c8366004612205565b60556020526000908152604090205463ffffffff1681565b6101d46102ee366004612289565b610958565b6101d4610a73565b6101e9610ae5565b6001546001600160a01b0316610211565b61032d6000546201000090046001600160a01b03161590565b6040519015158152602001610160565b610156610afe565b6052546101569081565b6053546000906001600160a01b031633146103855760405162461bcd60e51b815260040161037c906123bc565b60405180910390fd5b63ffffffff8083166000908152605560205260408120805490921691906103ab836123f5565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050919050565b6000546201000090046001600160a01b03163314610401576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811661042857604051630c11a52d60e11b815260040160405180910390fd5b6053546001600160a01b0390811690821681036104585760405163606e957b60e11b815260040160405180910390fd5b604080516001600160a01b038084168252841660208201527ff2fa31e21376edb31995720340ba00a41a12a7c8744a9bde552660121f4b7771910160405180910390a150605380546001600160a01b0319166001600160a01b0392909216919091179055565b60535460009081906001600160a01b031633146104ed5760405162461bcd60e51b815260040161037c906123bc565b60408051610440810180835261053b92869291603291839190820190839060209082845b81548152602001906001019080831161051157505050918352505060209182015491015290610b0f565b805160329061054d9082906020612173565b50602091820151910155506052546105656032610c1b565b60408051828152602081018490529081018590529092507fd50e83984b64a106ac2ee6314d689ec4d2a656d5ece6d94c585796944b52240c9060600160405180910390a1915091565b60535460009081906001600160a01b031633146105dd5760405162461bcd60e51b815260040161037c906123bc565b6040805161044081018083526000926032918391820190839060209082845b8154815260200190600101908083116105fc575050509183525050602091820154910152845190915060005b818110156106665761065c86828151811061064557610645612418565b602002602001015184610b0f90919063ffffffff16565b9250600101610628565b508151829060329061067b9082906020612173565b506020918201519082015582015192506106956032610c1b565b93507f3ef8438c07c6b4b67e70eace906a07e9b294c2f0066803f58e705567e1aa4f1b8484876040516106ca9392919061242e565b60405180910390a15050915091565b6106e16121b1565b604080516104008101918290529060329060209082845b8154815260200190600101908083116106f8575050505050905090565b6000546201000090046001600160a01b03163314610746576040516311a8a1bb60e31b815260040160405180910390fd5b60405163aa0e191b60e01b815260040160405180910390fd5b6053546001600160a01b031633146107895760405162461bcd60e51b815260040161037c906123bc565b60008181526054602052604081205460ff1660028111156107ac576107ac61224b565b146107e25760405162461bcd60e51b815260206004820152600660248201526521656d70747960d01b604482015260640161037c565b600081815260546020526040902080546001919060ff191682805b021790555050565b6000546201000090046001600160a01b03163314610836576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610854575060025415155b15610872576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083166201000090920416036108a657604051634a2fb73f60e11b815260040160405180910390fd5b6108af81611fd1565b50565b6053546001600160a01b031633146108dc5760405162461bcd60e51b815260040161037c906123bc565b600160008281526054602052604090205460ff1660028111156109015761090161224b565b146109385760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b604482015260640161037c565b600081815260546020526040902080546002919060ff19166001836107fd565b600054610100900460ff16158080156109785750600054600160ff909116105b806109925750303b158015610992575060005460ff166001145b6109f55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161037c565b6000805460ff191660011790558015610a18576000805461ff0019166101001790555b610a218261201f565b610a2961204f565b8015610a6f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001546001600160a01b03163314610a9e576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610ab09190612483565b11610ace576040516324e0285f60e21b815260040160405180910390fd5b600154610ae3906001600160a01b031661207e565b565b600080610af26032610c1b565b60525490939092509050565b6000610b0a6032610c1b565b905090565b610b176121d0565b6000836020018051610b2890612496565b9081905290506001610b3c60206002612593565b610b469190612483565b811115610b6657604051638eab04bb60e01b815260040160405180910390fd5b60005b6020811015610bfb5781600116600103610ba257845184908260208110610b9257610b92612418565b602002015250839150610c159050565b84518160208110610bb557610bb5612418565b602002015184604051602001610bd5929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209350600191821c9101610b69565b50604051638eab04bb60e01b815260040160405180910390fd5b92915050565b6020810154600090808203610c5257507f27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d75792915050565b6000836001831615610c74578054600052600060205260406000209350611527565b6002831615610cb95760018101546000527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb56020526040600020935060019150611527565b6004831615610cfe5760028101546000527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d306020526040600020935060029150611527565b6008831615610d435760038101546000527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba856020526040600020935060039150611527565b6010831615610d885760048101546000527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193446020526040600020935060049150611527565b6020831615610dcd5760058101546000527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d6020526040600020935060059150611527565b6040831615610e125760068101546000527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a19686020526040600020935060069150611527565b6080831615610e575760078101546000527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f836020526040600020935060079150611527565b610100831615610e9d5760088101546000527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6020526040600020935060089150611527565b610200831615610ee35760098101546000527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06020526040600020935060099150611527565b610400831615610f2957600a8101546000527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a560205260406000209350600a9150611527565b610800831615610f6f57600b8101546000527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf89260205260406000209350600b9150611527565b611000831615610fb557600c8101546000527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c60205260406000209350600c9150611527565b612000831615610ffb57600d8101546000527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb60205260406000209350600d9150611527565b61400083161561104157600e8101546000527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc60205260406000209350600e9150611527565b61800083161561108757600f8101546000527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d260205260406000209350600f9150611527565b620100008316156110ce5760108101546000527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6020526040600020935060109150611527565b620200008316156111155760118101546000527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6020526040600020935060119150611527565b6204000083161561115c5760128101546000527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06020526040600020935060129150611527565b620800008316156111a35760138101546000527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06020526040600020935060139150611527565b621000008316156111ea5760148101546000527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26020526040600020935060149150611527565b622000008316156112315760158101546000527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96020526040600020935060159150611527565b624000008316156112785760168101546000527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776020526040600020935060169150611527565b628000008316156112bf5760178101546000527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526020526040600020935060179150611527565b63010000008316156113075760188101546000527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6020526040600020935060189150611527565b630200000083161561134f5760198101546000527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6020526040600020935060199150611527565b630400000083161561139757601a8101546000527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d060205260406000209350601a9150611527565b63080000008316156113df57601b8101546000527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e60205260406000209350601b9150611527565b631000000083161561142757601c8101546000527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e60205260406000209350601c9150611527565b632000000083161561146f57601d8101546000527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32260205260406000209350601d9150611527565b63400000008316156114b757601e8101546000527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d73560205260406000209350601e9150611527565b63800000008316156114ff57601f8101546000527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a960205260406000209350601f9150611527565b7f27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d7579350602091505b601e8211611fc9576001821015611585576002831680156115535760018201546000528460205261157c565b846000527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb56020525b50604060002093505b60028210156115db576004831680156115a9576002820154600052846020526115d2565b846000527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d306020525b50604060002093505b6003821015611631576008831680156115ff57600382015460005284602052611628565b846000527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba856020525b50604060002093505b6004821015611687576010831680156116555760048201546000528460205261167e565b846000527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193446020525b50604060002093505b60058210156116dd576020831680156116ab576005820154600052846020526116d4565b846000527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d6020525b50604060002093505b6006821015611733576040831680156117015760068201546000528460205261172a565b846000527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a19686020525b50604060002093505b60078210156117895760808316801561175757600782015460005284602052611780565b846000527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f836020525b50604060002093505b60088210156117e057610100831680156117ae576008820154600052846020526117d7565b846000527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6020525b50604060002093505b600982101561183757610200831680156118055760098201546000528460205261182e565b846000527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06020525b50604060002093505b600a82101561188e576104008316801561185c57600a82015460005284602052611885565b846000527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56020525b50604060002093505b600b8210156118e557610800831680156118b357600b820154600052846020526118dc565b846000527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926020525b50604060002093505b600c82101561193c576110008316801561190a57600c82015460005284602052611933565b846000527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6020525b50604060002093505b600d821015611993576120008316801561196157600d8201546000528460205261198a565b846000527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6020525b50604060002093505b600e8210156119ea57614000831680156119b857600e820154600052846020526119e1565b846000527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6020525b50604060002093505b600f821015611a415761800083168015611a0f57600f82015460005284602052611a38565b846000527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26020525b50604060002093505b6010821015611a99576201000083168015611a6757601082015460005284602052611a90565b846000527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6020525b50604060002093505b6011821015611af1576202000083168015611abf57601182015460005284602052611ae8565b846000527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6020525b50604060002093505b6012821015611b49576204000083168015611b1757601282015460005284602052611b40565b846000527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06020525b50604060002093505b6013821015611ba1576208000083168015611b6f57601382015460005284602052611b98565b846000527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06020525b50604060002093505b6014821015611bf9576210000083168015611bc757601482015460005284602052611bf0565b846000527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26020525b50604060002093505b6015821015611c51576220000083168015611c1f57601582015460005284602052611c48565b846000527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96020525b50604060002093505b6016821015611ca9576240000083168015611c7757601682015460005284602052611ca0565b846000527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776020525b50604060002093505b6017821015611d01576280000083168015611ccf57601782015460005284602052611cf8565b846000527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526020525b50604060002093505b6018821015611d5a57630100000083168015611d2857601882015460005284602052611d51565b846000527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6020525b50604060002093505b6019821015611db357630200000083168015611d8157601982015460005284602052611daa565b846000527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6020525b50604060002093505b601a821015611e0c57630400000083168015611dda57601a82015460005284602052611e03565b846000527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06020525b50604060002093505b601b821015611e6557630800000083168015611e3357601b82015460005284602052611e5c565b846000527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6020525b50604060002093505b601c821015611ebe57631000000083168015611e8c57601c82015460005284602052611eb5565b846000527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6020525b50604060002093505b601d821015611f1757632000000083168015611ee557601d82015460005284602052611f0e565b846000527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226020525b50604060002093505b601e821015611f7057634000000083168015611f3e57601e82015460005284602052611f67565b846000527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356020525b50604060002093505b601f821015611fc957638000000083168015611f9757601f82015460005284602052611fc0565b846000527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96020525b50604060002093505b505050919050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600054610100900460ff166120465760405162461bcd60e51b815260040161037c9061259f565b6108af816120fa565b600054610100900460ff166120765760405162461bcd60e51b815260040161037c9061259f565b610ae3612143565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091178155600255600180546001600160a01b0319169055565b600054610100900460ff166121215760405162461bcd60e51b815260040161037c9061259f565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1661216a5760405162461bcd60e51b815260040161037c9061259f565b610ae33361207e565b82602081019282156121a1579160200282015b828111156121a1578251825591602001919060010190612186565b506121ad9291506121f0565b5090565b6040518061040001604052806020906020820280368337509192915050565b60405180604001604052806121e36121b1565b8152602001600081525090565b5b808211156121ad57600081556001016121f1565b60006020828403121561221757600080fd5b813563ffffffff8116811461222b57600080fd5b9392505050565b60006020828403121561224457600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016003831061228357634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561229b57600080fd5b81356001600160a01b038116811461222b57600080fd5b634e487b7160e01b600052604160045260246000fd5b600060208083850312156122db57600080fd5b823567ffffffffffffffff808211156122f357600080fd5b818501915085601f83011261230757600080fd5b813581811115612319576123196122b2565b8060051b604051601f19603f8301168101818110858211171561233e5761233e6122b2565b60405291825284820192508381018501918883111561235c57600080fd5b938501935b8285101561237a57843584529385019392850192612361565b98975050505050505050565b6104008101818360005b602080821061239f57506123b3565b825184529283019290910190600101612390565b50505092915050565b60208082526009908201526808585c989bdc9a5cdd60ba1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681810361240e5761240e6123df565b6001019392505050565b634e487b7160e01b600052603260045260246000fd5b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b8181101561247557845183529383019391830191600101612459565b509098975050505050505050565b81810381811115610c1557610c156123df565b6000600182016124a8576124a86123df565b5060010190565b600181815b808511156124ea5781600019048211156124d0576124d06123df565b808516156124dd57918102915b93841c93908002906124b4565b509250929050565b60008261250157506001610c15565b8161250e57506000610c15565b8160018114612524576002811461252e5761254a565b6001915050610c15565b60ff84111561253f5761253f6123df565b50506001821b610c15565b5060208310610133831016604e8410600b841016171561256d575081810a610c15565b61257783836124af565b806000190482111561258b5761258b6123df565b029392505050565b600061222b83836124f2565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122045a1527550f15c239cc4244bcc76051c19fd5da70bdc648706ed383d9ee4911564736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80638da5cb5b116100c3578063c5b350df1161007c578063c5b350df146102f3578063c9b0a6de146102fb578063d1851c9214610303578063d232c22014610314578063ebf0c7171461033d578063fd54b2281461034557600080fd5b80638da5cb5b1461026a57806398fae8e914610281578063b1f8100d14610294578063b61f1030146102a7578063b95a2001146102ba578063c4d66de8146102e057600080fd5b806331d0913c1161011557806331d0913c146101fe57806334a55ee6146102295780633cf52ffb1461023c5780634b72d0d4146102445780636a42b8f814610259578063715018a61461026257600080fd5b806306661abd146101525780630c132ab514610169578063151bcd2c146101915780631b373a98146101c15780632d287e43146101d6575b600080fd5b6052545b6040519081526020015b60405180910390f35b61017c610177366004612205565b61034f565b60405163ffffffff9091168152602001610160565b6101b461019f366004612232565b60546020526000908152604090205460ff1681565b6040516101609190612261565b6101d46101cf366004612289565b6103d0565b005b6101e96101e4366004612232565b6104be565b60408051928352602083019190915201610160565b605354610211906001600160a01b031681565b6040516001600160a01b039091168152602001610160565b6101e96102373660046122c8565b6105ae565b600254610156565b61024c6106d9565b6040516101609190612386565b62093a80610156565b6101d4610715565b6000546201000090046001600160a01b0316610211565b6101d461028f366004612232565b61075f565b6101d46102a2366004612289565b610805565b6101d46102b5366004612232565b6108b2565b61017c6102c8366004612205565b60556020526000908152604090205463ffffffff1681565b6101d46102ee366004612289565b610958565b6101d4610a73565b6101e9610ae5565b6001546001600160a01b0316610211565b61032d6000546201000090046001600160a01b03161590565b6040519015158152602001610160565b610156610afe565b6052546101569081565b6053546000906001600160a01b031633146103855760405162461bcd60e51b815260040161037c906123bc565b60405180910390fd5b63ffffffff8083166000908152605560205260408120805490921691906103ab836123f5565b91906101000a81548163ffffffff021916908363ffffffff1602179055509050919050565b6000546201000090046001600160a01b03163314610401576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811661042857604051630c11a52d60e11b815260040160405180910390fd5b6053546001600160a01b0390811690821681036104585760405163606e957b60e11b815260040160405180910390fd5b604080516001600160a01b038084168252841660208201527ff2fa31e21376edb31995720340ba00a41a12a7c8744a9bde552660121f4b7771910160405180910390a150605380546001600160a01b0319166001600160a01b0392909216919091179055565b60535460009081906001600160a01b031633146104ed5760405162461bcd60e51b815260040161037c906123bc565b60408051610440810180835261053b92869291603291839190820190839060209082845b81548152602001906001019080831161051157505050918352505060209182015491015290610b0f565b805160329061054d9082906020612173565b50602091820151910155506052546105656032610c1b565b60408051828152602081018490529081018590529092507fd50e83984b64a106ac2ee6314d689ec4d2a656d5ece6d94c585796944b52240c9060600160405180910390a1915091565b60535460009081906001600160a01b031633146105dd5760405162461bcd60e51b815260040161037c906123bc565b6040805161044081018083526000926032918391820190839060209082845b8154815260200190600101908083116105fc575050509183525050602091820154910152845190915060005b818110156106665761065c86828151811061064557610645612418565b602002602001015184610b0f90919063ffffffff16565b9250600101610628565b508151829060329061067b9082906020612173565b506020918201519082015582015192506106956032610c1b565b93507f3ef8438c07c6b4b67e70eace906a07e9b294c2f0066803f58e705567e1aa4f1b8484876040516106ca9392919061242e565b60405180910390a15050915091565b6106e16121b1565b604080516104008101918290529060329060209082845b8154815260200190600101908083116106f8575050505050905090565b6000546201000090046001600160a01b03163314610746576040516311a8a1bb60e31b815260040160405180910390fd5b60405163aa0e191b60e01b815260040160405180910390fd5b6053546001600160a01b031633146107895760405162461bcd60e51b815260040161037c906123bc565b60008181526054602052604081205460ff1660028111156107ac576107ac61224b565b146107e25760405162461bcd60e51b815260206004820152600660248201526521656d70747960d01b604482015260640161037c565b600081815260546020526040902080546001919060ff191682805b021790555050565b6000546201000090046001600160a01b03163314610836576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610854575060025415155b15610872576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083166201000090920416036108a657604051634a2fb73f60e11b815260040160405180910390fd5b6108af81611fd1565b50565b6053546001600160a01b031633146108dc5760405162461bcd60e51b815260040161037c906123bc565b600160008281526054602052604090205460ff1660028111156109015761090161224b565b146109385760405162461bcd60e51b815260206004820152600760248201526610b83937bb32b760c91b604482015260640161037c565b600081815260546020526040902080546002919060ff19166001836107fd565b600054610100900460ff16158080156109785750600054600160ff909116105b806109925750303b158015610992575060005460ff166001145b6109f55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161037c565b6000805460ff191660011790558015610a18576000805461ff0019166101001790555b610a218261201f565b610a2961204f565b8015610a6f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001546001600160a01b03163314610a9e576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610ab09190612483565b11610ace576040516324e0285f60e21b815260040160405180910390fd5b600154610ae3906001600160a01b031661207e565b565b600080610af26032610c1b565b60525490939092509050565b6000610b0a6032610c1b565b905090565b610b176121d0565b6000836020018051610b2890612496565b9081905290506001610b3c60206002612593565b610b469190612483565b811115610b6657604051638eab04bb60e01b815260040160405180910390fd5b60005b6020811015610bfb5781600116600103610ba257845184908260208110610b9257610b92612418565b602002015250839150610c159050565b84518160208110610bb557610bb5612418565b602002015184604051602001610bd5929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209350600191821c9101610b69565b50604051638eab04bb60e01b815260040160405180910390fd5b92915050565b6020810154600090808203610c5257507f27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d75792915050565b6000836001831615610c74578054600052600060205260406000209350611527565b6002831615610cb95760018101546000527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb56020526040600020935060019150611527565b6004831615610cfe5760028101546000527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d306020526040600020935060029150611527565b6008831615610d435760038101546000527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba856020526040600020935060039150611527565b6010831615610d885760048101546000527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193446020526040600020935060049150611527565b6020831615610dcd5760058101546000527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d6020526040600020935060059150611527565b6040831615610e125760068101546000527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a19686020526040600020935060069150611527565b6080831615610e575760078101546000527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f836020526040600020935060079150611527565b610100831615610e9d5760088101546000527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6020526040600020935060089150611527565b610200831615610ee35760098101546000527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06020526040600020935060099150611527565b610400831615610f2957600a8101546000527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a560205260406000209350600a9150611527565b610800831615610f6f57600b8101546000527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf89260205260406000209350600b9150611527565b611000831615610fb557600c8101546000527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c60205260406000209350600c9150611527565b612000831615610ffb57600d8101546000527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb60205260406000209350600d9150611527565b61400083161561104157600e8101546000527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc60205260406000209350600e9150611527565b61800083161561108757600f8101546000527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d260205260406000209350600f9150611527565b620100008316156110ce5760108101546000527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6020526040600020935060109150611527565b620200008316156111155760118101546000527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6020526040600020935060119150611527565b6204000083161561115c5760128101546000527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06020526040600020935060129150611527565b620800008316156111a35760138101546000527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06020526040600020935060139150611527565b621000008316156111ea5760148101546000527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26020526040600020935060149150611527565b622000008316156112315760158101546000527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96020526040600020935060159150611527565b624000008316156112785760168101546000527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776020526040600020935060169150611527565b628000008316156112bf5760178101546000527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526020526040600020935060179150611527565b63010000008316156113075760188101546000527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6020526040600020935060189150611527565b630200000083161561134f5760198101546000527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6020526040600020935060199150611527565b630400000083161561139757601a8101546000527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d060205260406000209350601a9150611527565b63080000008316156113df57601b8101546000527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e60205260406000209350601b9150611527565b631000000083161561142757601c8101546000527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e60205260406000209350601c9150611527565b632000000083161561146f57601d8101546000527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea32260205260406000209350601d9150611527565b63400000008316156114b757601e8101546000527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d73560205260406000209350601e9150611527565b63800000008316156114ff57601f8101546000527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a960205260406000209350601f9150611527565b7f27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d7579350602091505b601e8211611fc9576001821015611585576002831680156115535760018201546000528460205261157c565b846000527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb56020525b50604060002093505b60028210156115db576004831680156115a9576002820154600052846020526115d2565b846000527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d306020525b50604060002093505b6003821015611631576008831680156115ff57600382015460005284602052611628565b846000527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba856020525b50604060002093505b6004821015611687576010831680156116555760048201546000528460205261167e565b846000527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a193446020525b50604060002093505b60058210156116dd576020831680156116ab576005820154600052846020526116d4565b846000527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d6020525b50604060002093505b6006821015611733576040831680156117015760068201546000528460205261172a565b846000527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a19686020525b50604060002093505b60078210156117895760808316801561175757600782015460005284602052611780565b846000527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f836020525b50604060002093505b60088210156117e057610100831680156117ae576008820154600052846020526117d7565b846000527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6020525b50604060002093505b600982101561183757610200831680156118055760098201546000528460205261182e565b846000527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06020525b50604060002093505b600a82101561188e576104008316801561185c57600a82015460005284602052611885565b846000527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56020525b50604060002093505b600b8210156118e557610800831680156118b357600b820154600052846020526118dc565b846000527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926020525b50604060002093505b600c82101561193c576110008316801561190a57600c82015460005284602052611933565b846000527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6020525b50604060002093505b600d821015611993576120008316801561196157600d8201546000528460205261198a565b846000527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6020525b50604060002093505b600e8210156119ea57614000831680156119b857600e820154600052846020526119e1565b846000527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6020525b50604060002093505b600f821015611a415761800083168015611a0f57600f82015460005284602052611a38565b846000527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26020525b50604060002093505b6010821015611a99576201000083168015611a6757601082015460005284602052611a90565b846000527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6020525b50604060002093505b6011821015611af1576202000083168015611abf57601182015460005284602052611ae8565b846000527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6020525b50604060002093505b6012821015611b49576204000083168015611b1757601282015460005284602052611b40565b846000527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06020525b50604060002093505b6013821015611ba1576208000083168015611b6f57601382015460005284602052611b98565b846000527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06020525b50604060002093505b6014821015611bf9576210000083168015611bc757601482015460005284602052611bf0565b846000527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26020525b50604060002093505b6015821015611c51576220000083168015611c1f57601582015460005284602052611c48565b846000527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96020525b50604060002093505b6016821015611ca9576240000083168015611c7757601682015460005284602052611ca0565b846000527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776020525b50604060002093505b6017821015611d01576280000083168015611ccf57601782015460005284602052611cf8565b846000527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526020525b50604060002093505b6018821015611d5a57630100000083168015611d2857601882015460005284602052611d51565b846000527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6020525b50604060002093505b6019821015611db357630200000083168015611d8157601982015460005284602052611daa565b846000527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6020525b50604060002093505b601a821015611e0c57630400000083168015611dda57601a82015460005284602052611e03565b846000527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06020525b50604060002093505b601b821015611e6557630800000083168015611e3357601b82015460005284602052611e5c565b846000527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6020525b50604060002093505b601c821015611ebe57631000000083168015611e8c57601c82015460005284602052611eb5565b846000527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6020525b50604060002093505b601d821015611f1757632000000083168015611ee557601d82015460005284602052611f0e565b846000527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226020525b50604060002093505b601e821015611f7057634000000083168015611f3e57601e82015460005284602052611f67565b846000527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356020525b50604060002093505b601f821015611fc957638000000083168015611f9757601f82015460005284602052611fc0565b846000527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96020525b50604060002093505b505050919050565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600054610100900460ff166120465760405162461bcd60e51b815260040161037c9061259f565b6108af816120fa565b600054610100900460ff166120765760405162461bcd60e51b815260040161037c9061259f565b610ae3612143565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091178155600255600180546001600160a01b0319169055565b600054610100900460ff166121215760405162461bcd60e51b815260040161037c9061259f565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1661216a5760405162461bcd60e51b815260040161037c9061259f565b610ae33361207e565b82602081019282156121a1579160200282015b828111156121a1578251825591602001919060010190612186565b506121ad9291506121f0565b5090565b6040518061040001604052806020906020820280368337509192915050565b60405180604001604052806121e36121b1565b8152602001600081525090565b5b808211156121ad57600081556001016121f1565b60006020828403121561221757600080fd5b813563ffffffff8116811461222b57600080fd5b9392505050565b60006020828403121561224457600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b602081016003831061228357634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561229b57600080fd5b81356001600160a01b038116811461222b57600080fd5b634e487b7160e01b600052604160045260246000fd5b600060208083850312156122db57600080fd5b823567ffffffffffffffff808211156122f357600080fd5b818501915085601f83011261230757600080fd5b813581811115612319576123196122b2565b8060051b604051601f19603f8301168101818110858211171561233e5761233e6122b2565b60405291825284820192508381018501918883111561235c57600080fd5b938501935b8285101561237a57843584529385019392850192612361565b98975050505050505050565b6104008101818360005b602080821061239f57506123b3565b825184529283019290910190600101612390565b50505092915050565b60208082526009908201526808585c989bdc9a5cdd60ba1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff80831681810361240e5761240e6123df565b6001019392505050565b634e487b7160e01b600052603260045260246000fd5b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b8181101561247557845183529383019391830191600101612459565b509098975050505050505050565b81810381811115610c1557610c156123df565b6000600182016124a8576124a86123df565b5060010190565b600181815b808511156124ea5781600019048211156124d0576124d06123df565b808516156124dd57918102915b93841c93908002906124b4565b509250929050565b60008261250157506001610c15565b8161250e57506000610c15565b8160018114612524576002811461252e5761254a565b6001915050610c15565b60ff84111561253f5761253f6123df565b50506001821b610c15565b5060208310610133831016604e8410600b841016171561256d575081810a610c15565b61257783836124af565b806000190482111561258b5761258b6123df565b029392505050565b600061222b83836124f2565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122045a1527550f15c239cc4244bcc76051c19fd5da70bdc648706ed383d9ee4911564736f6c63430008110033", + "devdoc": { + "details": "On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.", + "kind": "dev", + "methods": { + "incrementNonce(uint32)": { + "params": { + "_domain": "The domain the nonce will be used for" + }, + "returns": { + "_nonce": "The incremented nonce" + } + }, + "insert(bytes32)": { + "params": { + "leaf": "The leaf to be inserted into the tree." + }, + "returns": { + "_count": "Current node count (i.e. number of indices) AFTER the insertion of the new leaf, provided for convenience.", + "_root": "Current root for convenience." + } + }, + "insert(bytes32[])": { + "params": { + "_leaves": "The leaves to be inserted into the tree." + }, + "returns": { + "_count": "Current node count (i.e. number of indices) AFTER the insertion of the new leaf, provided for convenience.", + "_root": "Current root for convenience." + } + }, + "markAsProcessed(bytes32)": { + "params": { + "_leaf": "The leaf to mark as proven" + } + }, + "markAsProven(bytes32)": { + "params": { + "_leaf": "The leaf to mark as proven" + } + }, + "renounceOwnership()": { + "details": "Renounce ownership should be impossible as long as there is a possibility the arborist may change." + }, + "setArborist(address)": { + "params": { + "newArborist": "The new address to set as the current arborist." + } + } + }, + "stateVariables": { + "arborist": { + "details": "This could be the root manager contract or a spoke connector contract, for example." + } + }, + "title": "MerkleTreeManager", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "acceptProposedOwner()": { + "notice": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "arborist()": { + "notice": "The arborist contract that has permission to write to this tree." + }, + "branch()": { + "notice": "Returns the current branch." + }, + "count()": { + "notice": "Returns the number of inserted leaves in the tree (current index)." + }, + "delay()": { + "notice": "Returns the delay period before a new owner can be accepted." + }, + "incrementNonce(uint32)": { + "notice": "Used to increment nonce" + }, + "insert(bytes32)": { + "notice": "Inserts the given leaf into the tree." + }, + "insert(bytes32[])": { + "notice": "Inserts the given leaves into the tree." + }, + "leaves(bytes32)": { + "notice": "The leaves that are proven already" + }, + "markAsProcessed(bytes32)": { + "notice": "Used to track processed leaves" + }, + "markAsProven(bytes32)": { + "notice": "Used to track proven leaves" + }, + "nonces(uint32)": { + "notice": "domain => next available nonce for the domain." + }, + "owner()": { + "notice": "Returns the address of the current owner." + }, + "proposeNewOwner(address)": { + "notice": "Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process" + }, + "proposed()": { + "notice": "Returns the address of the proposed owner." + }, + "proposedTimestamp()": { + "notice": "Returns the address of the proposed owner." + }, + "renounceOwnership()": { + "notice": "Remove ability to renounce ownership" + }, + "renounced()": { + "notice": "Indicates if the ownership has been renounced() by checking if current owner is address(0)" + }, + "root()": { + "notice": "Calculates and returns the current root." + }, + "rootAndCount()": { + "notice": "Convenience getter: returns the root and count." + }, + "setArborist(address)": { + "notice": "Method for the current arborist to assign write permissions to a new arborist." + }, + "tree()": { + "notice": "Core data structure with which this contract is tasked with keeping custody. Writable only by the designated arborist." + } + }, + "notice": "Contains a Merkle tree instance and exposes read/write functions for the tree.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 224, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 227, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 49880, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "_owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 49882, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "_proposed", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 49884, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 50133, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "__GAP", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)47_storage" + }, + { + "astId": 32691, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "tree", + "offset": 0, + "slot": "50", + "type": "t_struct(Tree)49023_storage" + }, + { + "astId": 32694, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "arborist", + "offset": 0, + "slot": "83", + "type": "t_address" + }, + { + "astId": 32700, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "leaves", + "offset": 0, + "slot": "84", + "type": "t_mapping(t_bytes32,t_enum(LeafStatus)32683)" + }, + { + "astId": 32705, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "nonces", + "offset": 0, + "slot": "85", + "type": "t_mapping(t_uint32,t_uint32)" + }, + { + "astId": 33035, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "__GAP", + "offset": 0, + "slot": "86", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)32_storage": { + "base": "t_bytes32", + "encoding": "inplace", + "label": "bytes32[32]", + "numberOfBytes": "1024" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)47_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_enum(LeafStatus)32683": { + "encoding": "inplace", + "label": "enum MerkleTreeManager.LeafStatus", + "numberOfBytes": "1" + }, + "t_mapping(t_bytes32,t_enum(LeafStatus)32683)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum MerkleTreeManager.LeafStatus)", + "numberOfBytes": "32", + "value": "t_enum(LeafStatus)32683" + }, + "t_mapping(t_uint32,t_uint32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => uint32)", + "numberOfBytes": "32", + "value": "t_uint32" + }, + "t_struct(Tree)49023_storage": { + "encoding": "inplace", + "label": "struct MerkleLib.Tree", + "members": [ + { + "astId": 49020, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "branch", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)32_storage" + }, + { + "astId": 49022, + "contract": "contracts/messaging/MerkleTreeManager.sol:MerkleTreeManager", + "label": "count", + "offset": 0, + "slot": "32", + "type": "t_uint256" + } + ], + "numberOfBytes": "1056" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerUpgradeBeaconProxyStaging.json b/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerUpgradeBeaconProxyStaging.json new file mode 100644 index 0000000000..0fc1dfbd4d --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerUpgradeBeaconProxyStaging.json @@ -0,0 +1,109 @@ +{ + "address": "0x955D1693C64e5a0746130FF6F6653E2171cC6708", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_upgradeBeacon", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_initializationCalldata", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xea362cbfbbde1240b87ba3f3d0ddfd261b81feef096a5c8a89ec64768efc02c2", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x955D1693C64e5a0746130FF6F6653E2171cC6708", + "transactionIndex": 1, + "gasUsed": "214444", + "logsBloom": "0x00000000000000000000000000000000000000000000400000800000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000010000000000000000000000000000000000000080000000000000000000000000000000080000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000001020000000000000000000000000000001000000000000000000000000000000000000", + "blockHash": "0x613e30d6960bdb68de4e77bb4536263564efcf2c29ad059da25cc29ea0489367", + "transactionHash": "0xea362cbfbbde1240b87ba3f3d0ddfd261b81feef096a5c8a89ec64768efc02c2", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2889685, + "transactionHash": "0xea362cbfbbde1240b87ba3f3d0ddfd261b81feef096a5c8a89ec64768efc02c2", + "address": "0x955D1693C64e5a0746130FF6F6653E2171cC6708", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x613e30d6960bdb68de4e77bb4536263564efcf2c29ad059da25cc29ea0489367" + }, + { + "transactionIndex": 1, + "blockNumber": 2889685, + "transactionHash": "0xea362cbfbbde1240b87ba3f3d0ddfd261b81feef096a5c8a89ec64768efc02c2", + "address": "0x955D1693C64e5a0746130FF6F6653E2171cC6708", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 1, + "blockHash": "0x613e30d6960bdb68de4e77bb4536263564efcf2c29ad059da25cc29ea0489367" + } + ], + "blockNumber": 2889685, + "cumulativeGasUsed": "265006", + "status": 1, + "byzantium": true + }, + "args": [ + "0xB20c7f8aDe683C1ad7F5b76435D9345059b1ed3F", + "0xc4d66de80000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_upgradeBeacon\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initializationCalldata\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage found in 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment found in OpenZeppelin's implementation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_initializationCalldata\":\"Calldata supplied when calling the initialization function\",\"_upgradeBeacon\":\"Address of the Upgrade Beacon to be stored immutably in the contract\"}}},\"title\":\"UpgradeBeaconProxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Validate that the Upgrade Beacon is a contract, then set its address immutably within this contract. Validate that the implementation is also a contract, Then call the initialization function defined at the implementation. The deployment will revert and pass along the revert reason if the initialization function reverts.\"}},\"notice\":\"Proxy contract which delegates all logic, including initialization, to an implementation contract. The implementation contract is stored within an Upgrade Beacon contract; the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract. The Upgrade Beacon contract for this Proxy is immutably specified at deployment.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/upgrade/UpgradeBeaconProxy.sol\":\"UpgradeBeaconProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/shared/upgrade/UpgradeBeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title UpgradeBeaconProxy\\n * @notice\\n * Proxy contract which delegates all logic, including initialization,\\n * to an implementation contract.\\n * The implementation contract is stored within an Upgrade Beacon contract;\\n * the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract.\\n * The Upgrade Beacon contract for this Proxy is immutably specified at deployment.\\n * @dev This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage\\n * found in 0age's implementation:\\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\\n * With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment\\n * found in OpenZeppelin's implementation:\\n * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\\n */\\ncontract UpgradeBeaconProxy {\\n // ============ Immutables ============\\n\\n // Upgrade Beacon address is immutable (therefore not kept in contract storage)\\n address private immutable upgradeBeacon;\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Validate that the Upgrade Beacon is a contract, then set its\\n * address immutably within this contract.\\n * Validate that the implementation is also a contract,\\n * Then call the initialization function defined at the implementation.\\n * The deployment will revert and pass along the\\n * revert reason if the initialization function reverts.\\n * @param _upgradeBeacon Address of the Upgrade Beacon to be stored immutably in the contract\\n * @param _initializationCalldata Calldata supplied when calling the initialization function\\n */\\n constructor(address _upgradeBeacon, bytes memory _initializationCalldata) payable {\\n // Validate the Upgrade Beacon is a contract\\n require(Address.isContract(_upgradeBeacon), \\\"beacon !contract\\\");\\n // set the Upgrade Beacon\\n upgradeBeacon = _upgradeBeacon;\\n // Validate the implementation is a contract\\n address _implementation = _getImplementation(_upgradeBeacon);\\n require(Address.isContract(_implementation), \\\"beacon implementation !contract\\\");\\n // Call the initialization function on the implementation\\n if (_initializationCalldata.length > 0) {\\n _initialize(_implementation, _initializationCalldata);\\n }\\n }\\n\\n // ============ External Functions ============\\n\\n /**\\n * @notice Forwards all calls with data to _fallback()\\n * No public functions are declared on the contract, so all calls hit fallback\\n */\\n fallback() external payable {\\n _fallback();\\n }\\n\\n /**\\n * @notice Forwards all calls with no data to _fallback()\\n */\\n receive() external payable {\\n _fallback();\\n }\\n\\n // ============ Private Functions ============\\n\\n /**\\n * @notice Call the initialization function on the implementation\\n * Used at deployment to initialize the proxy\\n * based on the logic for initialization defined at the implementation\\n * @param _implementation - Contract to which the initalization is delegated\\n * @param _initializationCalldata - Calldata supplied when calling the initialization function\\n */\\n function _initialize(address _implementation, bytes memory _initializationCalldata) private {\\n // Delegatecall into the implementation, supplying initialization calldata.\\n (bool _ok, ) = _implementation.delegatecall(_initializationCalldata);\\n // Revert and include revert data if delegatecall to implementation reverts.\\n if (!_ok) {\\n assembly {\\n returndatacopy(0, 0, returndatasize())\\n revert(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @notice Delegates function calls to the implementation contract returned by the Upgrade Beacon\\n */\\n function _fallback() private {\\n _delegate(_getImplementation());\\n }\\n\\n /**\\n * @notice Delegate function execution to the implementation contract\\n * @dev This is a low level function that doesn't return to its internal\\n * call site. It will return whatever is returned by the implementation to the\\n * external caller, reverting and returning the revert data if implementation\\n * reverts.\\n * @param _implementation - Address to which the function execution is delegated\\n */\\n function _delegate(address _implementation) private {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n // Delegatecall to the implementation, supplying calldata and gas.\\n // Out and outsize are set to zero - instead, use the return buffer.\\n let result := delegatecall(gas(), _implementation, 0, calldatasize(), 0, 0)\\n // Copy the returned data from the return buffer.\\n returndatacopy(0, 0, returndatasize())\\n switch result\\n // Delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @notice Call the Upgrade Beacon to get the current implementation contract address\\n * @return _implementation Address of the current implementation.\\n */\\n function _getImplementation() private view returns (address _implementation) {\\n _implementation = _getImplementation(upgradeBeacon);\\n }\\n\\n /**\\n * @notice Call the Upgrade Beacon to get the current implementation contract address\\n * @dev _upgradeBeacon is passed as a parameter so that\\n * we can also use this function in the constructor,\\n * where we can't access immutable variables.\\n * @param _upgradeBeacon Address of the UpgradeBeacon storing the current implementation\\n * @return _implementation Address of the current implementation.\\n */\\n function _getImplementation(address _upgradeBeacon) private view returns (address _implementation) {\\n // Get the current implementation address from the upgrade beacon.\\n (bool _ok, bytes memory _returnData) = _upgradeBeacon.staticcall(\\\"\\\");\\n // Revert and pass along revert message if call to upgrade beacon reverts.\\n require(_ok, string(_returnData));\\n // Set the implementation to the address returned from the upgrade beacon.\\n _implementation = abi.decode(_returnData, (address));\\n }\\n}\\n\",\"keccak256\":\"0xc6367ff3b5fa60b1f63d9df81c58671c7bb0978e52682ff1cc977028b67ebd17\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x60a060405260405161059e38038061059e83398101604081905261002291610272565b6100358261010b60201b6100291760201c565b6100795760405162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b60448201526064015b60405180910390fd5b6001600160a01b03821660805260006100918361011a565b90506100a68161010b60201b6100291760201c565b6100f25760405162461bcd60e51b815260206004820152601f60248201527f626561636f6e20696d706c656d656e746174696f6e2021636f6e7472616374006044820152606401610070565b8151156101035761010381836101ae565b5050506103a7565b6001600160a01b03163b151590565b6000806000836001600160a01b0316604051600060405180830381855afa9150503d8060008114610167576040519150601f19603f3d011682016040523d82523d6000602084013e61016c565b606091505b50915091508181906101915760405162461bcd60e51b81526004016100709190610334565b50808060200190518101906101a69190610367565b949350505050565b6000826001600160a01b0316826040516101c8919061038b565b600060405180830381855af49150503d8060008114610203576040519150601f19603f3d011682016040523d82523d6000602084013e610208565b606091505b505090508061021b573d6000803e3d6000fd5b505050565b6001600160a01b038116811461023557600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610269578181015183820152602001610251565b50506000910152565b6000806040838503121561028557600080fd5b825161029081610220565b60208401519092506001600160401b03808211156102ad57600080fd5b818501915085601f8301126102c157600080fd5b8151818111156102d3576102d3610238565b604051601f8201601f19908116603f011681019083821181831017156102fb576102fb610238565b8160405282815288602084870101111561031457600080fd5b61032583602083016020880161024e565b80955050505050509250929050565b602081526000825180602084015261035381604085016020870161024e565b601f01601f19169190910160400192915050565b60006020828403121561037957600080fd5b815161038481610220565b9392505050565b6000825161039d81846020870161024e565b9190910192915050565b6080516101dd6103c16000396000603f01526101dd6000f3fe60806040523661001357610011610017565b005b6100115b610027610022610038565b610068565b565b6001600160a01b03163b151590565b60006100637f000000000000000000000000000000000000000000000000000000000000000061008c565b905090565b3660008037600080366000845af43d6000803e808015610087573d6000f35b3d6000fd5b6000806000836001600160a01b0316604051600060405180830381855afa9150503d80600081146100d9576040519150601f19603f3d011682016040523d82523d6000602084013e6100de565b606091505b509150915081819061010c5760405162461bcd60e51b81526004016101039190610129565b60405180910390fd5b50808060200190518101906101219190610177565b949350505050565b600060208083528351808285015260005b818110156101565785810183015185820160400152820161013a565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561018957600080fd5b81516001600160a01b03811681146101a057600080fd5b939250505056fea2646970667358221220a40ba76469fb4734050f07534290fc78c939fcb8d364a11afa7988e3ab34ae1464736f6c63430008110033", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b610027610022610038565b610068565b565b6001600160a01b03163b151590565b60006100637f000000000000000000000000000000000000000000000000000000000000000061008c565b905090565b3660008037600080366000845af43d6000803e808015610087573d6000f35b3d6000fd5b6000806000836001600160a01b0316604051600060405180830381855afa9150503d80600081146100d9576040519150601f19603f3d011682016040523d82523d6000602084013e6100de565b606091505b509150915081819061010c5760405162461bcd60e51b81526004016101039190610129565b60405180910390fd5b50808060200190518101906101219190610177565b949350505050565b600060208083528351808285015260005b818110156101565785810183015185820160400152820161013a565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561018957600080fd5b81516001600160a01b03811681146101a057600080fd5b939250505056fea2646970667358221220a40ba76469fb4734050f07534290fc78c939fcb8d364a11afa7988e3ab34ae1464736f6c63430008110033", + "devdoc": { + "details": "This implementation combines the gas savings of keeping the UpgradeBeacon address outside of contract storage found in 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol With the added safety checks that the UpgradeBeacon and implementation are contracts at time of deployment found in OpenZeppelin's implementation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol", + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_initializationCalldata": "Calldata supplied when calling the initialization function", + "_upgradeBeacon": "Address of the Upgrade Beacon to be stored immutably in the contract" + } + } + }, + "title": "UpgradeBeaconProxy", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "constructor": { + "notice": "Validate that the Upgrade Beacon is a contract, then set its address immutably within this contract. Validate that the implementation is also a contract, Then call the initialization function defined at the implementation. The deployment will revert and pass along the revert reason if the initialization function reverts." + } + }, + "notice": "Proxy contract which delegates all logic, including initialization, to an implementation contract. The implementation contract is stored within an Upgrade Beacon contract; the implementation contract can be changed by performing an upgrade on the Upgrade Beacon contract. The Upgrade Beacon contract for this Proxy is immutably specified at deployment.", + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerUpgradeBeaconStaging.json b/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerUpgradeBeaconStaging.json new file mode 100644 index 0000000000..741b054154 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/MerkleTreeManagerUpgradeBeaconStaging.json @@ -0,0 +1,120 @@ +{ + "address": "0xB20c7f8aDe683C1ad7F5b76435D9345059b1ed3F", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_initialImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "_controller", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgrade", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + } + ], + "transactionHash": "0x01dd1754efba616d63ccb2c8cd82f0b8cfe2d803cbebc5b2daf05e6c0f191a56", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0xB20c7f8aDe683C1ad7F5b76435D9345059b1ed3F", + "transactionIndex": 1, + "gasUsed": "168991", + "logsBloom": "0x00000000000000000000000000000000000000000000000000020000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000100000000000000000000000000000000000000000000010000002000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2eec50206b58c75c781063a482fe37184836ecae3e412b89dfaefd901f4bcf1d", + "transactionHash": "0x01dd1754efba616d63ccb2c8cd82f0b8cfe2d803cbebc5b2daf05e6c0f191a56", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2889682, + "transactionHash": "0x01dd1754efba616d63ccb2c8cd82f0b8cfe2d803cbebc5b2daf05e6c0f191a56", + "address": "0xB20c7f8aDe683C1ad7F5b76435D9345059b1ed3F", + "topics": [ + "0xf78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d", + "0x000000000000000000000000ba7a99409ac88e15a1945a8a8a047fe51bbf9d95" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x2eec50206b58c75c781063a482fe37184836ecae3e412b89dfaefd901f4bcf1d" + } + ], + "blockNumber": 2889682, + "cumulativeGasUsed": "244577", + "status": 1, + "byzantium": true + }, + "args": [ + "0xbA7A99409aC88E15A1945A8A8a047Fe51BBf9D95", + "0x20098c6d481225fF5D9b2ca84cF68FC683e21031" + ], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialImplementation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgrade\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This implementation combines the gas savings of having no function selectors found in 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol With the added niceties of a safety check that each implementation is a contract and an Upgrade event emitted each time the implementation is changed found in OpenZeppelin's implementation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_controller\":\"Address of the controller who can upgrade the implementation\",\"_initialImplementation\":\"Address of the initial implementation contract\"}}},\"title\":\"UpgradeBeacon\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Validate the initial implementation and store it. Store the controller immutably.\"}},\"notice\":\"Stores the address of an implementation contract and allows a controller to upgrade the implementation address\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/upgrade/UpgradeBeacon.sol\":\"UpgradeBeacon\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/shared/upgrade/UpgradeBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title UpgradeBeacon\\n * @notice Stores the address of an implementation contract\\n * and allows a controller to upgrade the implementation address\\n * @dev This implementation combines the gas savings of having no function selectors\\n * found in 0age's implementation:\\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\\n * With the added niceties of a safety check that each implementation is a contract\\n * and an Upgrade event emitted each time the implementation is changed\\n * found in OpenZeppelin's implementation:\\n * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\\n */\\ncontract UpgradeBeacon {\\n // ============ Immutables ============\\n\\n // The controller is capable of modifying the implementation address\\n address private immutable controller;\\n\\n // ============ Private Storage Variables ============\\n\\n // The implementation address is held in storage slot zero.\\n address private implementation;\\n\\n // ============ Events ============\\n\\n // Upgrade event is emitted each time the implementation address is set\\n // (including deployment)\\n event Upgrade(address indexed implementation);\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Validate the initial implementation and store it.\\n * Store the controller immutably.\\n * @param _initialImplementation Address of the initial implementation contract\\n * @param _controller Address of the controller who can upgrade the implementation\\n */\\n constructor(address _initialImplementation, address _controller) payable {\\n _setImplementation(_initialImplementation);\\n controller = _controller;\\n }\\n\\n // ============ External Functions ============\\n\\n /**\\n * @notice For all callers except the controller, return the current implementation address.\\n * If called by the Controller, update the implementation address\\n * to the address passed in the calldata.\\n * Note: this requires inline assembly because Solidity fallback functions\\n * do not natively take arguments or return values.\\n */\\n fallback() external payable {\\n if (msg.sender != controller) {\\n // if not called by the controller,\\n // load implementation address from storage slot zero\\n // and return it.\\n assembly {\\n mstore(0, sload(0))\\n return(0, 32)\\n }\\n } else {\\n // if called by the controller,\\n // load new implementation address from the first word of the calldata\\n address _newImplementation;\\n assembly {\\n _newImplementation := calldataload(0)\\n }\\n // set the new implementation\\n _setImplementation(_newImplementation);\\n }\\n }\\n\\n // ============ Private Functions ============\\n\\n /**\\n * @notice Perform checks on the new implementation address\\n * then upgrade the stored implementation.\\n * @param _newImplementation Address of the new implementation contract which will replace the old one\\n */\\n function _setImplementation(address _newImplementation) private {\\n // Require that the new implementation is different from the current one\\n require(implementation != _newImplementation, \\\"!upgrade\\\");\\n // Require that the new implementation is a contract\\n require(Address.isContract(_newImplementation), \\\"implementation !contract\\\");\\n // set the new implementation\\n implementation = _newImplementation;\\n emit Upgrade(_newImplementation);\\n }\\n}\\n\",\"keccak256\":\"0x5e1831c308ec61d9ea9294343a280e1683c4ef8c12fb30dd02c2fff8050529c2\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x60a06040526040516103283803806103288339810160408190526100229161015c565b61002b8261003d565b6001600160a01b03166080525061018f565b6000546001600160a01b0380831691160361008a5760405162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b60448201526064015b60405180910390fd5b61009d8161013160201b61013a1760201c565b6100e95760405162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e747261637400000000000000006044820152606401610081565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b6001600160a01b03163b151590565b80516001600160a01b038116811461015757600080fd5b919050565b6000806040838503121561016f57600080fd5b61017883610140565b915061018660208401610140565b90509250929050565b60805161017f6101a96000396000600f015261017f6000f3fe6080604052336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100405760005460005260206000f35b60003561004c8161004e565b005b6000546001600160a01b0380831691160361009b5760405162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b60448201526064015b60405180910390fd5b6001600160a01b0381163b6100f25760405162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e747261637400000000000000006044820152606401610092565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b6001600160a01b03163b15159056fea2646970667358221220999210c314e678c37dda4571b82d6639d4e4ba3e320610d428105195d3e1603464736f6c63430008110033", + "deployedBytecode": "0x6080604052336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100405760005460005260206000f35b60003561004c8161004e565b005b6000546001600160a01b0380831691160361009b5760405162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b60448201526064015b60405180910390fd5b6001600160a01b0381163b6100f25760405162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e747261637400000000000000006044820152606401610092565b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b6001600160a01b03163b15159056fea2646970667358221220999210c314e678c37dda4571b82d6639d4e4ba3e320610d428105195d3e1603464736f6c63430008110033", + "devdoc": { + "details": "This implementation combines the gas savings of having no function selectors found in 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol With the added niceties of a safety check that each implementation is a contract and an Upgrade event emitted each time the implementation is changed found in OpenZeppelin's implementation: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol", + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_controller": "Address of the controller who can upgrade the implementation", + "_initialImplementation": "Address of the initial implementation contract" + } + } + }, + "title": "UpgradeBeacon", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "constructor": { + "notice": "Validate the initial implementation and store it. Store the controller immutably." + } + }, + "notice": "Stores the address of an implementation contract and allows a controller to upgrade the implementation address", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 51443, + "contract": "contracts/shared/upgrade/UpgradeBeacon.sol:UpgradeBeacon", + "label": "implementation", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/MultiSend.json b/packages/deployments/contracts/deployments/fraxtal/MultiSend.json new file mode 100644 index 0000000000..7a4762150d --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/MultiSend.json @@ -0,0 +1,68 @@ +{ + "address": "0x43Add7f520Cc35e5DbF04f5426a03EA8Ca052c98", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "transactions", + "type": "bytes" + } + ], + "name": "multiSend", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x163b34727238642c391e84fd8a732e852f5409dace8eb106d39c49e21010d0fe", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x43Add7f520Cc35e5DbF04f5426a03EA8Ca052c98", + "transactionIndex": 1, + "gasUsed": "171016", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x69387cdc118b789c9f3a32d0aee5974ec862c105bd04d4ff10edc7a081edd1b4", + "transactionHash": "0x163b34727238642c391e84fd8a732e852f5409dace8eb106d39c49e21010d0fe", + "logs": [], + "blockNumber": 2895047, + "cumulativeGasUsed": "246590", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"transactions\",\"type\":\"bytes\"}],\"name\":\"multiSend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Modification was to ensure this is called from an EOA, rather than enforcing the `delegatecall` usage as in the original contract.\",\"kind\":\"dev\",\"methods\":{\"multiSend(bytes)\":{\"details\":\"Sends multiple transactions and reverts all if one fails.\",\"params\":{\"transactions\":\"Encoded transactions. Each transaction is encoded as a packed bytes of operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte), to as a address (=> 20 bytes), value as a uint256 (=> 32 bytes), data length as a uint256 (=> 32 bytes), data as bytes. see abi.encodePacked for more information on packed encoding\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Modified from https://github.com/safe-global/safe-contracts/blob/main/contracts/libraries/MultiSend.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/libraries/Multisend.sol\":\"MultiSend\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/shared/libraries/Multisend.sol\":{\"content\":\"// SPDX-License-Identifier: LGPL-3.0-only\\npragma solidity ^0.8.0;\\n\\n/**\\n * @notice Modified from https://github.com/safe-global/safe-contracts/blob/main/contracts/libraries/MultiSend.sol\\n *\\n * @dev Modification was to ensure this is called from an EOA, rather than enforcing the\\n * `delegatecall` usage as in the original contract.\\n */\\ncontract MultiSend {\\n address private immutable multisendSingleton;\\n\\n constructor() {\\n multisendSingleton = address(this);\\n }\\n\\n /**\\n * @dev Sends multiple transactions and reverts all if one fails.\\n * @param transactions Encoded transactions. Each transaction is encoded as a packed bytes of\\n * operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte),\\n * to as a address (=> 20 bytes),\\n * value as a uint256 (=> 32 bytes),\\n * data length as a uint256 (=> 32 bytes),\\n * data as bytes.\\n * see abi.encodePacked for more information on packed encoding\\n */\\n function multiSend(bytes memory transactions) public payable {\\n require(msg.sender.code.length == 0, \\\"MultiSend should only be called via EOA\\\");\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let length := mload(transactions)\\n let i := 0x20\\n for {\\n // Pre block is not used in \\\"while mode\\\"\\n } lt(i, length) {\\n // Post block is not used in \\\"while mode\\\"\\n } {\\n // First byte of the data is the operation.\\n // We shift by 248 bits (256 - 8 [operation byte]) it right since mload will always load 32 bytes (a word).\\n // This will also zero out unused data.\\n let operation := shr(0xf8, mload(add(transactions, i)))\\n // We offset the load address by 1 byte (operation byte)\\n // We shift it right by 96 bits (256 - 160 [20 address bytes]) to right-align the data and zero out unused data.\\n let to := shr(0x60, mload(add(transactions, add(i, 0x01))))\\n // We offset the load address by 21 byte (operation byte + 20 address bytes)\\n let value := mload(add(transactions, add(i, 0x15)))\\n // We offset the load address by 53 byte (operation byte + 20 address bytes + 32 value bytes)\\n let dataLength := mload(add(transactions, add(i, 0x35)))\\n // We offset the load address by 85 byte (operation byte + 20 address bytes + 32 value bytes + 32 data length bytes)\\n let data := add(transactions, add(i, 0x55))\\n let success := 0\\n switch operation\\n case 0 {\\n success := call(gas(), to, value, data, dataLength, 0, 0)\\n }\\n case 1 {\\n success := delegatecall(gas(), to, data, dataLength, 0, 0)\\n }\\n if eq(success, 0) {\\n revert(0, 0)\\n }\\n // Next entry starts at 85 byte + data length\\n i := add(i, add(0x55, dataLength))\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x435057ec07548343ef163f526262589221507a2e152386dc74ef7d917b0bd143\",\"license\":\"LGPL-3.0-only\"}},\"version\":1}", + "bytecode": "0x60a060405234801561001057600080fd5b503060805260805161022061002d600039600050506102206000f3fe60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b610036610031366004610139565b610038565b005b333b1561009b5760405162461bcd60e51b815260206004820152602760248201527f4d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642060448201526676696120454f4160c81b606482015260840160405180910390fd5b805160205b8181101561011e578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146100e557600181146100f557610100565b6000808585888a5af19150610100565b6000808585895af491505b508061010b57600080fd5b50508060550185019450505050506100a0565b505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561014b57600080fd5b813567ffffffffffffffff8082111561016357600080fd5b818401915084601f83011261017757600080fd5b81358181111561018957610189610123565b604051601f8201601f19908116603f011681019083821181831017156101b1576101b1610123565b816040528281528760208487010111156101ca57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea26469706673582212203a98476913f6497f1e14c2a098f4f736f686478bc4777a4604ca864cd23dae8d64736f6c63430008110033", + "deployedBytecode": "0x60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b610036610031366004610139565b610038565b005b333b1561009b5760405162461bcd60e51b815260206004820152602760248201527f4d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642060448201526676696120454f4160c81b606482015260840160405180910390fd5b805160205b8181101561011e578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146100e557600181146100f557610100565b6000808585888a5af19150610100565b6000808585895af491505b508061010b57600080fd5b50508060550185019450505050506100a0565b505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561014b57600080fd5b813567ffffffffffffffff8082111561016357600080fd5b818401915084601f83011261017757600080fd5b81358181111561018957610189610123565b604051601f8201601f19908116603f011681019083821181831017156101b1576101b1610123565b816040528281528760208487010111156101ca57600080fd5b82602086016020830137600092810160200192909252509594505050505056fea26469706673582212203a98476913f6497f1e14c2a098f4f736f686478bc4777a4604ca864cd23dae8d64736f6c63430008110033", + "devdoc": { + "details": "Modification was to ensure this is called from an EOA, rather than enforcing the `delegatecall` usage as in the original contract.", + "kind": "dev", + "methods": { + "multiSend(bytes)": { + "details": "Sends multiple transactions and reverts all if one fails.", + "params": { + "transactions": "Encoded transactions. Each transaction is encoded as a packed bytes of operation as a uint8 with 0 for a call or 1 for a delegatecall (=> 1 byte), to as a address (=> 20 bytes), value as a uint256 (=> 32 bytes), data length as a uint256 (=> 32 bytes), data as bytes. see abi.encodePacked for more information on packed encoding" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "notice": "Modified from https://github.com/safe-global/safe-contracts/blob/main/contracts/libraries/MultiSend.sol", + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/PortalFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/PortalFacetStaging.json new file mode 100644 index 0000000000..167fcf2166 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/PortalFacetStaging.json @@ -0,0 +1,1302 @@ +{ + "address": "0x04B83cdACB4D6548aC583AFdEF6677128A789428", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_invalidAsset", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortalFor_zeroAmount", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_assetNotApproved", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__repayAavePortal_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "PortalFacet__setAavePortalFee_invalidFee", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "updated", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePoolUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "updated", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "transferId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AavePortalRepayment", + "type": "event" + }, + { + "inputs": [], + "name": "aavePool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "aavePortalFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_transferId", + "type": "bytes32" + } + ], + "name": "getAavePortalFeeDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxIn", + "type": "uint256" + } + ], + "name": "repayAavePortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "originDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "destinationDomain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "canonicalDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "internalType": "bool", + "name": "receiveLocal", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "callData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "originSender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bridgedAmt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "normalizedIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + } + ], + "internalType": "struct TransferInfo", + "name": "_params", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_portalAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_backingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_feeAmount", + "type": "uint256" + } + ], + "name": "repayAavePortalFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_aavePool", + "type": "address" + } + ], + "name": "setAavePool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_aavePortalFeeNumerator", + "type": "uint256" + } + ], + "name": "setAavePortalFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x0476e906488e6bacaac8a9f39e54a9d862c5e2158795b06b3bbe8f1465d49184", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1859501", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6b557228250bbea40b20cdff790f040f6ec0812567bcc25b5a4dd2442c1018c8", + "transactionHash": "0x0476e906488e6bacaac8a9f39e54a9d862c5e2158795b06b3bbe8f1465d49184", + "logs": [], + "blockNumber": 2894800, + "cumulativeGasUsed": "1910063", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__getTokenIndexFromStableSwapPool_notExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__repayAavePortalFor_invalidAsset\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__repayAavePortalFor_zeroAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__repayAavePortal_assetNotApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__repayAavePortal_insufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PortalFacet__setAavePortalFee_invalidFee\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AavePoolUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updated\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AavePortalFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AavePortalRepayment\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"aavePool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aavePortalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"getAavePortalDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_transferId\",\"type\":\"bytes32\"}],\"name\":\"getAavePortalFeeDebt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_backingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxIn\",\"type\":\"uint256\"}],\"name\":\"repayAavePortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_portalAsset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_backingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_feeAmount\",\"type\":\"uint256\"}],\"name\":\"repayAavePortalFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_aavePool\",\"type\":\"address\"}],\"name\":\"setAavePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_aavePortalFeeNumerator\",\"type\":\"uint256\"}],\"name\":\"setAavePortalFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AavePoolUpdated(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"updated\":\"- The updated address\"}},\"AavePortalFeeUpdated(uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"updated\":\"- The updated fee numerator\"}},\"AavePortalRepayment(bytes32,address,uint256,uint256,address)\":{\"params\":{\"amount\":\"- The amount that was repaid\",\"asset\":\"- The asset that was repaid\",\"fee\":\"- The fee amount that was repaid\",\"transferId\":\"- The transfer debt that was repaid\"}}},\"kind\":\"dev\",\"methods\":{\"repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)\":{\"details\":\"The router must be approved for portal and with enough liquidity, and must be the caller of this function. If the asset is not whitelisted, must use the `repayAavePortalFor` function.\",\"params\":{\"_backingAmount\":\"The principle to be paid (in adopted asset)\",\"_feeAmount\":\"The fee to be paid (in adopted asset)\",\"_maxIn\":\"The max value of the local asset to swap for the _backingAmount of adopted asset\",\"_params\":\"TransferInfo associated with the transfer\"}},\"repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)\":{\"details\":\"Should always be paying in the backing asset for the aave loan. NOTE: This will *NOT* work if an asset is removed.\",\"params\":{\"_backingAmount\":\"Amount of principle to repay\",\"_feeAmount\":\"Amount of fees to repay\",\"_params\":\"TransferInfo associated with the transfer\",\"_portalAsset\":\"The asset you borrowed (adopted asset)\"}},\"setAavePool(address)\":{\"details\":\"Allows to set the aavePool to address zero to disable Aave Portal if needed\",\"params\":{\"_aavePool\":\"The address of the Aave Pool contract\"}},\"setAavePortalFee(uint256)\":{\"params\":{\"_aavePortalFeeNumerator\":\"The new value for the Aave Portal fee numerator\"}}},\"version\":1},\"userdoc\":{\"events\":{\"AavePoolUpdated(address,address)\":{\"notice\":\"Emitted `setAavePool` is updated\"},\"AavePortalFeeUpdated(uint256,address)\":{\"notice\":\"Emitted `setAavePortalFee` is updated\"},\"AavePortalRepayment(bytes32,address,uint256,uint256,address)\":{\"notice\":\"Emitted when a repayment on an Aave portal loan is made\"}},\"kind\":\"user\",\"methods\":{\"repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)\":{\"notice\":\"Used by routers to perform a manual repayment to Aave Portals to cover any outstanding debt\"},\"repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)\":{\"notice\":\"This allows anyone to repay the portal in the adopted asset for a given router and transfer\"},\"setAavePool(address)\":{\"notice\":\"Sets the Aave Pool contract address.\"},\"setAavePortalFee(uint256)\":{\"notice\":\"Sets the Aave Portal fee numerator\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/PortalFacet.sol\":\"PortalFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/PortalFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\nimport {IAavePool} from \\\"../interfaces/IAavePool.sol\\\";\\n\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\nimport {TransferInfo} from \\\"../libraries/LibConnextStorage.sol\\\";\\n\\ncontract PortalFacet is BaseConnextFacet {\\n // ========== Custom Errors ===========\\n error PortalFacet__setAavePortalFee_invalidFee();\\n error PortalFacet__repayAavePortal_assetNotApproved();\\n error PortalFacet__repayAavePortal_insufficientFunds();\\n error PortalFacet__repayAavePortalFor_zeroAmount();\\n error PortalFacet__repayAavePortalFor_invalidAsset();\\n\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted `setAavePool` is updated\\n * @param updated - The updated address\\n * @param caller - The account that called the function\\n */\\n event AavePoolUpdated(address updated, address caller);\\n\\n /**\\n * @notice Emitted `setAavePortalFee` is updated\\n * @param updated - The updated fee numerator\\n * @param caller - The account that called the function\\n */\\n event AavePortalFeeUpdated(uint256 updated, address caller);\\n\\n /**\\n * @notice Emitted when a repayment on an Aave portal loan is made\\n * @param transferId - The transfer debt that was repaid\\n * @param asset - The asset that was repaid\\n * @param amount - The amount that was repaid\\n * @param fee - The fee amount that was repaid\\n */\\n event AavePortalRepayment(bytes32 indexed transferId, address asset, uint256 amount, uint256 fee, address caller);\\n\\n // ============ Getters methods ==============\\n\\n function getAavePortalDebt(bytes32 _transferId) external view returns (uint256) {\\n return s.portalDebt[_transferId];\\n }\\n\\n function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256) {\\n return s.portalFeeDebt[_transferId];\\n }\\n\\n function aavePool() external view returns (address) {\\n return s.aavePool;\\n }\\n\\n function aavePortalFee() external view returns (uint256) {\\n return s.aavePortalFeeNumerator;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Sets the Aave Pool contract address.\\n * @dev Allows to set the aavePool to address zero to disable Aave Portal if needed\\n * @param _aavePool The address of the Aave Pool contract\\n */\\n function setAavePool(address _aavePool) external onlyOwnerOrAdmin {\\n s.aavePool = _aavePool;\\n emit AavePoolUpdated(_aavePool, msg.sender);\\n }\\n\\n /**\\n * @notice Sets the Aave Portal fee numerator\\n * @param _aavePortalFeeNumerator The new value for the Aave Portal fee numerator\\n */\\n function setAavePortalFee(uint256 _aavePortalFeeNumerator) external onlyOwnerOrAdmin {\\n if (_aavePortalFeeNumerator > Constants.BPS_FEE_DENOMINATOR) revert PortalFacet__setAavePortalFee_invalidFee();\\n\\n s.aavePortalFeeNumerator = _aavePortalFeeNumerator;\\n emit AavePortalFeeUpdated(_aavePortalFeeNumerator, msg.sender);\\n }\\n\\n /**\\n * @notice Used by routers to perform a manual repayment to Aave Portals to cover any outstanding debt\\n * @dev The router must be approved for portal and with enough liquidity, and must be the caller of this\\n * function. If the asset is not whitelisted, must use the `repayAavePortalFor` function.\\n * @param _params TransferInfo associated with the transfer\\n * @param _backingAmount The principle to be paid (in adopted asset)\\n * @param _feeAmount The fee to be paid (in adopted asset)\\n * @param _maxIn The max value of the local asset to swap for the _backingAmount of adopted asset\\n */\\n function repayAavePortal(\\n TransferInfo calldata _params,\\n uint256 _backingAmount,\\n uint256 _feeAmount,\\n uint256 _maxIn\\n ) external nonReentrant {\\n bytes32 key = AssetLogic.calculateCanonicalHash(_params.canonicalId, _params.canonicalDomain);\\n\\n // Ensure the asset is approved\\n if (!s.tokenConfigs[key].approval) {\\n revert PortalFacet__repayAavePortal_assetNotApproved();\\n }\\n\\n address local = _getLocalAsset(key, _params.canonicalId, _params.canonicalDomain);\\n\\n uint256 routerBalance = s.routerBalances[msg.sender][local];\\n // Sanity check: has that much to spend\\n if (routerBalance < _maxIn) revert PortalFacet__repayAavePortal_insufficientFunds();\\n\\n // Here, generate the transfer id. This allows us to ensure the `_local` asset\\n // is the correct one associated with the transfer. Otherwise, anyone could pay back\\n // the loan with the incorrect asset and remove the ability to transfer here. If the\\n // `_local` asset is incorrectly supplied, the generated transferId will also be\\n // incorrect, and the _backLoan call (which manipulates the debt stored) will fail.\\n // Another option is to store the asset associated with the transfer on `execute`, but\\n // this would make an already expensive call even more so.\\n bytes32 transferId = _calculateTransferId(_params);\\n\\n // Need to swap into adopted asset or asset that was backing the loan\\n // The router will always be holding collateral in the local asset while the loaned asset\\n // is the adopted asset\\n\\n // Swap for exact `totalRepayAmount` of adopted asset to repay aave\\n (uint256 amountDebited, address assetLoaned) = AssetLogic.swapFromLocalAssetIfNeededForExactOut(\\n key,\\n local,\\n _backingAmount + _feeAmount,\\n _maxIn\\n );\\n\\n // decrement router balances\\n s.routerBalances[msg.sender][local] = routerBalance - amountDebited;\\n\\n // back loan\\n _backLoan(assetLoaned, _backingAmount, _feeAmount, transferId);\\n }\\n\\n /**\\n * @notice This allows anyone to repay the portal in the adopted asset for a given router\\n * and transfer\\n *\\n * @dev Should always be paying in the backing asset for the aave loan. NOTE: This will *NOT*\\n * work if an asset is removed.\\n *\\n * @param _params TransferInfo associated with the transfer\\n * @param _portalAsset The asset you borrowed (adopted asset)\\n * @param _backingAmount Amount of principle to repay\\n * @param _feeAmount Amount of fees to repay\\n */\\n function repayAavePortalFor(\\n TransferInfo calldata _params,\\n address _portalAsset,\\n uint256 _backingAmount,\\n uint256 _feeAmount\\n ) external payable nonReentrant {\\n // Get the adopted address\\n // NOTE: using storage directly because if `_getAdoptedAsset` is used, will revert if\\n // the asset is not whitelisted (and this fn should work if asset is removed)\\n address adopted = s\\n .tokenConfigs[AssetLogic.calculateCanonicalHash(_params.canonicalId, _params.canonicalDomain)]\\n .adopted;\\n\\n // Verify asset\\n // NOTE: if asset is removed, `adopted` will be `address(0)`, so you cannot verify the asset\\n // but should still allow for portal loans to be repaid.\\n if (adopted != address(0) && _portalAsset != adopted) {\\n revert PortalFacet__repayAavePortalFor_invalidAsset();\\n }\\n\\n // Here, generate the transfer id. This allows us to ensure the `_adopted` asset\\n // is the correct one associated with the transfer. Otherwise, anyone could pay back\\n // the loan with the incorrect asset and remove the ability to transfer here. If the\\n // `_adopted` asset is incorrectly supplied, the generated transferId will also be\\n // incorrect, and the _backLoan call (which manipulates the debt stored) will fail.\\n // Another option is to store the asset associated with the transfer on `execute`, but\\n // this would make an already expensive call even more so.\\n bytes32 transferId = _calculateTransferId(_params);\\n\\n // Transfer funds to the contract\\n uint256 total = _backingAmount + _feeAmount;\\n if (total == 0) revert PortalFacet__repayAavePortalFor_zeroAmount();\\n\\n AssetLogic.handleIncomingAsset(adopted, total);\\n\\n // No need to swap because this is the adopted asset. Simply\\n // repay the loan\\n _backLoan(adopted, _backingAmount, _feeAmount, transferId);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @notice Calls backUnbacked on the aave contracts\\n * @dev Assumes funds in adopted asset are already on contract\\n * @param _asset Address of the adopted asset (asset backing the loan)\\n * @param _backing Amount of principle to repay\\n * @param _fee Amount of fees to repay\\n * @param _transferId Corresponding transfer id for the fees\\n */\\n function _backLoan(\\n address _asset,\\n uint256 _backing,\\n uint256 _fee,\\n bytes32 _transferId\\n ) internal {\\n // reduce debt\\n s.portalDebt[_transferId] -= _backing;\\n s.portalFeeDebt[_transferId] -= _fee;\\n\\n address aPool = s.aavePool;\\n\\n // increase allowance\\n SafeERC20.safeApprove(IERC20(_asset), aPool, 0);\\n SafeERC20.safeIncreaseAllowance(IERC20(_asset), aPool, _backing + _fee);\\n\\n // back loan\\n IAavePool(aPool).backUnbacked(_asset, _backing, _fee);\\n\\n // emit event\\n emit AavePortalRepayment(_transferId, _asset, _backing, _fee, msg.sender);\\n }\\n}\\n\",\"keccak256\":\"0x044a78e50570ccea3e0537068d261c7d681051faa9f9795ae924a3c176a5e80a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IAavePool.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\ninterface IAavePool {\\n /**\\n * @dev Mints an `amount` of aTokens to the `onBehalfOf`\\n * @param asset The address of the underlying asset to mint\\n * @param amount The amount to mint\\n * @param onBehalfOf The address that will receive the aTokens\\n * @param referralCode Code used to register the integrator originating the operation, for potential rewards.\\n * 0 if the action is executed directly by the user, without any middle-man\\n **/\\n function mintUnbacked(\\n address asset,\\n uint256 amount,\\n address onBehalfOf,\\n uint16 referralCode\\n ) external;\\n\\n /**\\n * @dev Back the current unbacked underlying with `amount` and pay `fee`.\\n * @param asset The address of the underlying asset to back\\n * @param amount The amount to back\\n * @param fee The amount paid in fees\\n **/\\n function backUnbacked(\\n address asset,\\n uint256 amount,\\n uint256 fee\\n ) external;\\n\\n /**\\n * @notice Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned\\n * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC\\n * @param asset The address of the underlying asset to withdraw\\n * @param amount The underlying amount to be withdrawn\\n * - Send the value type(uint256).max in order to withdraw the whole aToken balance\\n * @param to The address that will receive the underlying, same as msg.sender if the user\\n * wants to receive it on his own wallet, or a different address if the beneficiary is a\\n * different wallet\\n * @return The final amount withdrawn\\n **/\\n function withdraw(\\n address asset,\\n uint256 amount,\\n address to\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xd196cc8605b8ecfa5991614f6c234f2bc5d1a605cdb53778e91a93822dfb752f\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061209a806100206000396000f3fe60806040526004361061007b5760003560e01c8063a03e4bc31161004e578063a03e4bc314610115578063b3f62fcb1461013d578063d1e5f31c1461015d578063ef1eb0c11461018a57600080fd5b806309d7ba5414610080578063349f937c146100c05780633bd30d34146100e257806375d3237114610102575b600080fd5b34801561008c57600080fd5b506100ad61009b366004611aec565b6000908152601d602052604090205490565b6040519081526020015b60405180910390f35b3480156100cc57600080fd5b506100e06100db366004611b21565b61019f565b005b3480156100ee57600080fd5b506100e06100fd366004611aec565b610284565b6100e0610110366004611b55565b61036c565b34801561012157600080fd5b50601b546040516001600160a01b0390911681526020016100b7565b34801561014957600080fd5b506100e0610158366004611bb2565b61047e565b34801561016957600080fd5b506100ad610178366004611aec565b6000908152601e602052604090205490565b34801561019657600080fd5b50601c546100ad565b336101d17fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b03161415801561020c575060033360009081526014602052604090205460ff16600381111561020957610209611c06565b14155b1561022a57604051637b32c26b60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b038316908117909155604080519182523360208301527f7935dbc7e9662d3877fe03509de1a139f55a861386088919480ed3162e2976ec91015b60405180910390a150565b336102b67fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b0316141580156102f1575060033360009081526014602052604090205460ff1660038111156102ee576102ee611c06565b14155b1561030f57604051637b32c26b60e01b815260040160405180910390fd5b6127108111156103325760405163f48157d160e01b815260040160405180910390fd5b601c819055604080518281523360208201527f7d403a16a513cb194fca13e6aba342102a2a11c978e12a90981891c1a19f0b6f9101610279565b6016546001190161039057604051637ce54e2d60e11b815260040160405180910390fd5b600260165560006007816103b86101808801356103b360608a0160408b01611c30565b6105df565b81526020810191909152604001600020600101546001600160a01b0316905080158015906103f85750806001600160a01b0316846001600160a01b031614155b15610416576040516339bcb9bb60e11b815260040160405180910390fd5b600061042961042487611d34565b610622565b905060006104378486611e40565b90508060000361045a576040516330d5e3e360e11b815260040160405180910390fd5b6104648382610652565b610470838686856107a3565b505060016016555050505050565b601654600119016104a257604051637ce54e2d60e11b815260040160405180910390fd5b600260165560006104c26101808601356103b36060880160408901611c30565b600081815260076020526040902060020154909150600160a01b900460ff166104fe5760405163b074ae7360e01b815260040160405180910390fd5b600061051f8261018088013561051a60608a0160408b01611c30565b6108d7565b336000908152600a602090815260408083206001600160a01b0385168452909152902054909150838110156105675760405163badaeb5960e01b815260040160405180910390fd5b600061057561042489611d34565b905060008061058f86866105898b8d611e40565b8a6108ee565b909250905061059e8285611e53565b336000908152600a602090815260408083206001600160a01b038a1684529091529020556105ce818a8a866107a3565b505060016016555050505050505050565b6000828260405160200161060392919091825263ffffffff16602082015260400190565b6040516020818303038152906040528051906020012090505b92915050565b6000816040516020016106359190611eb6565b604051602081830303815290604052805190602001209050919050565b8060000361065e575050565b6001600160a01b03821661068557604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190611fb0565b90506107096001600160a01b038316333086610941565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190611fb0565b61077f9190611e53565b1461079d57604051630e40773560e21b815260040160405180910390fd5b50505050565b6000818152601d6020526040812080548592906107c1908490611e53565b90915550506000818152601e6020526040812080548492906107e4908490611e53565b9091555050601b546001600160a01b0316610801858260006109ac565b61081585826108108688611e40565b610acb565b60405163d65dc7a160e01b81526001600160a01b038681166004830152602482018690526044820185905282169063d65dc7a190606401600060405180830381600087803b15801561086657600080fd5b505af115801561087a573d6000803e3d6000fd5b5050604080516001600160a01b0389168152602081018890529081018690523360608201528492507f54b01a5ae4ec60eeeef60570103ba1a5de0999725219c02b2baf1b706625bb08915060800160405180910390a25050505050565b60006108e68484846000610b7d565b949350505050565b60008060006108fc87610bb8565b60018101549091506001600160a01b0390811690871681036109245785935091506109389050565b6109318888838989610c00565b9350935050505b94509492505050565b6040516001600160a01b038085166024830152831660448201526064810182905261079d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d66565b801580610a265750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190611fb0565b155b610a965760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b6040516001600160a01b038316602482015260448101829052610ac690849063095ea7b360e01b90606401610975565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190611fb0565b610b4a9190611e40565b6040516001600160a01b03851660248201526044810182905290915061079d90859063095ea7b360e01b90606401610975565b600481015460009063ffffffff90811690841603610b9c5750826108e6565b610ba585610bb8565b546001600160a01b031695945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015610bf95760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b600085815260186020526040812081908190610c1b81610e38565b15610c4d57610c41610c2d8a8a610e55565b610c378b8a610e55565b8391908989610ed5565b87935093505050610d5c565b6000610c588a610bb8565b600201546001600160a01b03908116915081908a90610c7b9082168360006109ac565b610c8f6001600160a01b038216838a610acb565b60006001600160a01b038416635428c1178b8e8e8d610cb0610e1042611e40565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af1158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190611fb0565b9050610d4c6001600160a01b0383168460006109ac565b9650899550610d5c945050505050565b9550959350505050565b6000610dbb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111de9092919063ffffffff16565b805190915015610ac65780806020019051810190610dd99190611fc9565b610ac65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a8d565b600c81015460009060ff1615801561061c57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff1692919083908110610ea257610ea2611fe6565b6000918252602090912001546001600160a01b0316146108e65760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff1615610f1d5760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b6044820152606401610a8d565b85600a018460ff1681548110610f3557610f35611fe6565b9060005260206000200154831115610f885760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b6044820152606401610a8d565b600080600088600a01805480602002602001604051908101604052809291908181526020018280548015610fdb57602002820191906000526020600020905b815481526020019060010190808311610fc7575b50505050509050610fef89898989856111ed565b9093509150848311156110315760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610a8d565b6000896009018960ff168154811061104b5761104b611fe6565b90600052602060002001546402540be4008b600601548561106c9190611ffc565b6110769190612013565b6110809190612013565b90508084838b60ff168151811061109957611099611fe6565b60200260200101516110ab9190611e40565b6110b59190611e53565b8a600a018a60ff16815481106110cd576110cd611fe6565b906000526020600020018190555086828960ff16815181106110f1576110f1611fe6565b60200260200101516111039190611e53565b8a600a018960ff168154811061111b5761111b611fe6565b600091825260209091200155801561118057808a600b018a60ff168154811061114657611146611fe6565b906000526020600020015461115b9190611e40565b8a600b018a60ff168154811061117357611173611fe6565b6000918252602090912001555b895460408051868152602081018a905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b60606108e68484600085611438565b6000808460ff168660ff16036112455760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c660000000000000000006044820152606401610a8d565b60008760090180548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b815481526020019060010190808311611281575b5050505050905060006112a88583611513565b905080518860ff161080156112c0575080518760ff16105b6113015760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401610a8d565b600061130c8a61161e565b9050600061131a8383611629565b9050838960ff168151811061133157611331611fe6565b6020026020010151886113449190611ffc565b838a60ff168151811061135957611359611fe6565b602002602001015161136b9190611e53565b838a60ff168151811061138057611380611fe6565b602002602001018181525050600061139a838c86856117d6565b9050838b60ff16815181106113b1576113b1611fe6565b60200260200101518160016113c69190611e40565b6113d09190611e53565b96506402540be4008c60050154886113e89190611ffc565b6113f29190612013565b9550848b60ff168151811061140957611409611fe6565b6020026020010151868861141d9190611e40565b6114279190612013565b965050505050509550959350505050565b6060824710156114995760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a8d565b600080866001600160a01b031685876040516114b59190612035565b60006040518083038185875af1925050503d80600081146114f2576040519150601f19603f3d011682016040523d82523d6000602084013e6114f7565b606091505b5091509150611508878383876119c5565b979650505050505050565b815181516060919081146115605760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610a8d565b60008167ffffffffffffffff81111561157b5761157b611c4b565b6040519080825280602002602001820160405280156115a4578160200160208202803683370190505b50905060005b82811015611615578481815181106115c4576115c4611fe6565b60200260200101518682815181106115de576115de611fe6565b60200260200101516115f09190611ffc565b82828151811061160257611602611fe6565b60209081029190910101526001016115aa565b50949350505050565b600061061c82611a3e565b815160009081805b828110156116685785818151811061164b5761164b611fe6565b60200260200101518261165e9190611e40565b9150600101611631565b508060000361167c5760009250505061061c565b6000818161168a8588611ffc565b905060005b610100811015611797578260005b878110156116e857878b82815181106116b8576116b8611fe6565b60200260200101516116ca9190611ffc565b6116d48684611ffc565b6116de9190612013565b915060010161169d565b50839450808760016116fa9190611e40565b6117049190611ffc565b6064856117118287611e53565b61171b9190611ffc565b6117259190612013565b61172f9190611e40565b8461173a8984611ffc565b60646117468a88611ffc565b6117509190612013565b61175a9190611e40565b6117649190611ffc565b61176e9190612013565b935061177a8486611a87565b1561178e578397505050505050505061061c565b5060010161168f565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610a8d565b815160009060ff8516811161181f5760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610a8d565b8260008061182d848a611ffc565b905060005b848110156118af578860ff1681146118a75787818151811061185657611856611fe6565b6020026020010151836118699190611e40565b92508488828151811061187e5761187e611fe6565b60200260200101516118909190611ffc565b61189a8886611ffc565b6118a49190612013565b93505b600101611832565b506118ba8482611ffc565b60646118c68886611ffc565b6118d09190611ffc565b6118da9190612013565b92506000816118ea606489611ffc565b6118f49190612013565b6118fe9084611e40565b9050600087815b61010081101561197c5781925089848360026119219190611ffc565b61192b9190611e40565b6119359190611e53565b876119408480611ffc565b61194a9190611e40565b6119549190612013565b91506119608284611a87565b15611974575096506108e695505050505050565b600101611905565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610a8d565b60608315611a34578251600003611a2d576001600160a01b0385163b611a2d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a8d565b50816108e6565b6108e68383611a9d565b600481015460028201546001830154909190808314801590611a5f57508142105b15611a80576000846003015490508083038142038502428503840201049350505b5050919050565b60006002611a958484611ac7565b109392505050565b815115611aad5781518083602001fd5b8060405162461bcd60e51b8152600401610a8d9190612051565b600081831115611ae257611adb8284611e53565b905061061c565b610bf98383611e53565b600060208284031215611afe57600080fd5b5035919050565b80356001600160a01b0381168114611b1c57600080fd5b919050565b600060208284031215611b3357600080fd5b610bf982611b05565b60006101a08284031215611b4f57600080fd5b50919050565b60008060008060808587031215611b6b57600080fd5b843567ffffffffffffffff811115611b8257600080fd5b611b8e87828801611b3c565b945050611b9d60208601611b05565b93969395505050506040820135916060013590565b60008060008060808587031215611bc857600080fd5b843567ffffffffffffffff811115611bdf57600080fd5b611beb87828801611b3c565b97602087013597506040870135966060013595509350505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff81168114611b1c57600080fd5b600060208284031215611c4257600080fd5b610bf982611c1c565b634e487b7160e01b600052604160045260246000fd5b6040516101a0810167ffffffffffffffff81118282101715611c8557611c85611c4b565b60405290565b8015158114611c9957600080fd5b50565b8035611b1c81611c8b565b600082601f830112611cb857600080fd5b813567ffffffffffffffff80821115611cd357611cd3611c4b565b604051601f8301601f19908116603f01168101908282118183101715611cfb57611cfb611c4b565b81604052838152866020858801011115611d1457600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101a08236031215611d4757600080fd5b611d4f611c61565b611d5883611c1c565b8152611d6660208401611c1c565b6020820152611d7760408401611c1c565b6040820152611d8860608401611b05565b6060820152611d9960808401611b05565b6080820152611daa60a08401611c9c565b60a082015260c083013567ffffffffffffffff811115611dc957600080fd5b611dd536828601611ca7565b60c08301525060e083013560e0820152610100611df3818501611b05565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b634e487b7160e01b600052601160045260246000fd5b8082018082111561061c5761061c611e2a565b8181038181111561061c5761061c611e2a565b60005b83811015611e81578181015183820152602001611e69565b50506000910152565b60008151808452611ea2816020860160208601611e66565b601f01601f19169290920160200192915050565b60208152611ecd60208201835163ffffffff169052565b60006020830151611ee6604084018263ffffffff169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a083015180151560c08401525060c08301516101a08060e0850152611f4d6101c0850183611e8a565b60e086015161010086810191909152860151909250610120611f79818701836001600160a01b03169052565b8601516101408681019190915286015161016080870191909152860151610180808701919091529095015193019290925250919050565b600060208284031215611fc257600080fd5b5051919050565b600060208284031215611fdb57600080fd5b8151610bf981611c8b565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761061c5761061c611e2a565b60008261203057634e487b7160e01b600052601260045260246000fd5b500490565b60008251612047818460208701611e66565b9190910192915050565b602081526000610bf96020830184611e8a56fea26469706673582212205a7599f8cc2b0eeacfe93c9edf2cc765dba615fb7d1b5be1dc73ffcaea7ad62664736f6c63430008110033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063a03e4bc31161004e578063a03e4bc314610115578063b3f62fcb1461013d578063d1e5f31c1461015d578063ef1eb0c11461018a57600080fd5b806309d7ba5414610080578063349f937c146100c05780633bd30d34146100e257806375d3237114610102575b600080fd5b34801561008c57600080fd5b506100ad61009b366004611aec565b6000908152601d602052604090205490565b6040519081526020015b60405180910390f35b3480156100cc57600080fd5b506100e06100db366004611b21565b61019f565b005b3480156100ee57600080fd5b506100e06100fd366004611aec565b610284565b6100e0610110366004611b55565b61036c565b34801561012157600080fd5b50601b546040516001600160a01b0390911681526020016100b7565b34801561014957600080fd5b506100e0610158366004611bb2565b61047e565b34801561016957600080fd5b506100ad610178366004611aec565b6000908152601e602052604090205490565b34801561019657600080fd5b50601c546100ad565b336101d17fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b03161415801561020c575060033360009081526014602052604090205460ff16600381111561020957610209611c06565b14155b1561022a57604051637b32c26b60e01b815260040160405180910390fd5b601b80546001600160a01b0319166001600160a01b038316908117909155604080519182523360208301527f7935dbc7e9662d3877fe03509de1a139f55a861386088919480ed3162e2976ec91015b60405180910390a150565b336102b67fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6001600160a01b0316141580156102f1575060033360009081526014602052604090205460ff1660038111156102ee576102ee611c06565b14155b1561030f57604051637b32c26b60e01b815260040160405180910390fd5b6127108111156103325760405163f48157d160e01b815260040160405180910390fd5b601c819055604080518281523360208201527f7d403a16a513cb194fca13e6aba342102a2a11c978e12a90981891c1a19f0b6f9101610279565b6016546001190161039057604051637ce54e2d60e11b815260040160405180910390fd5b600260165560006007816103b86101808801356103b360608a0160408b01611c30565b6105df565b81526020810191909152604001600020600101546001600160a01b0316905080158015906103f85750806001600160a01b0316846001600160a01b031614155b15610416576040516339bcb9bb60e11b815260040160405180910390fd5b600061042961042487611d34565b610622565b905060006104378486611e40565b90508060000361045a576040516330d5e3e360e11b815260040160405180910390fd5b6104648382610652565b610470838686856107a3565b505060016016555050505050565b601654600119016104a257604051637ce54e2d60e11b815260040160405180910390fd5b600260165560006104c26101808601356103b36060880160408901611c30565b600081815260076020526040902060020154909150600160a01b900460ff166104fe5760405163b074ae7360e01b815260040160405180910390fd5b600061051f8261018088013561051a60608a0160408b01611c30565b6108d7565b336000908152600a602090815260408083206001600160a01b0385168452909152902054909150838110156105675760405163badaeb5960e01b815260040160405180910390fd5b600061057561042489611d34565b905060008061058f86866105898b8d611e40565b8a6108ee565b909250905061059e8285611e53565b336000908152600a602090815260408083206001600160a01b038a1684529091529020556105ce818a8a866107a3565b505060016016555050505050505050565b6000828260405160200161060392919091825263ffffffff16602082015260400190565b6040516020818303038152906040528051906020012090505b92915050565b6000816040516020016106359190611eb6565b604051602081830303815290604052805190602001209050919050565b8060000361065e575050565b6001600160a01b03821661068557604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156106ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f29190611fb0565b90506107096001600160a01b038316333086610941565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa158015610751573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107759190611fb0565b61077f9190611e53565b1461079d57604051630e40773560e21b815260040160405180910390fd5b50505050565b6000818152601d6020526040812080548592906107c1908490611e53565b90915550506000818152601e6020526040812080548492906107e4908490611e53565b9091555050601b546001600160a01b0316610801858260006109ac565b61081585826108108688611e40565b610acb565b60405163d65dc7a160e01b81526001600160a01b038681166004830152602482018690526044820185905282169063d65dc7a190606401600060405180830381600087803b15801561086657600080fd5b505af115801561087a573d6000803e3d6000fd5b5050604080516001600160a01b0389168152602081018890529081018690523360608201528492507f54b01a5ae4ec60eeeef60570103ba1a5de0999725219c02b2baf1b706625bb08915060800160405180910390a25050505050565b60006108e68484846000610b7d565b949350505050565b60008060006108fc87610bb8565b60018101549091506001600160a01b0390811690871681036109245785935091506109389050565b6109318888838989610c00565b9350935050505b94509492505050565b6040516001600160a01b038085166024830152831660448201526064810182905261079d9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d66565b801580610a265750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a249190611fb0565b155b610a965760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b6040516001600160a01b038316602482015260448101829052610ac690849063095ea7b360e01b90606401610975565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190611fb0565b610b4a9190611e40565b6040516001600160a01b03851660248201526044810182905290915061079d90859063095ea7b360e01b90606401610975565b600481015460009063ffffffff90811690841603610b9c5750826108e6565b610ba585610bb8565b546001600160a01b031695945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015610bf95760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b600085815260186020526040812081908190610c1b81610e38565b15610c4d57610c41610c2d8a8a610e55565b610c378b8a610e55565b8391908989610ed5565b87935093505050610d5c565b6000610c588a610bb8565b600201546001600160a01b03908116915081908a90610c7b9082168360006109ac565b610c8f6001600160a01b038216838a610acb565b60006001600160a01b038416635428c1178b8e8e8d610cb0610e1042611e40565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af1158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190611fb0565b9050610d4c6001600160a01b0383168460006109ac565b9650899550610d5c945050505050565b9550959350505050565b6000610dbb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111de9092919063ffffffff16565b805190915015610ac65780806020019051810190610dd99190611fc9565b610ac65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a8d565b600c81015460009060ff1615801561061c57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff1692919083908110610ea257610ea2611fe6565b6000918252602090912001546001600160a01b0316146108e65760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff1615610f1d5760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b6044820152606401610a8d565b85600a018460ff1681548110610f3557610f35611fe6565b9060005260206000200154831115610f885760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b6044820152606401610a8d565b600080600088600a01805480602002602001604051908101604052809291908181526020018280548015610fdb57602002820191906000526020600020905b815481526020019060010190808311610fc7575b50505050509050610fef89898989856111ed565b9093509150848311156110315760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610a8d565b6000896009018960ff168154811061104b5761104b611fe6565b90600052602060002001546402540be4008b600601548561106c9190611ffc565b6110769190612013565b6110809190612013565b90508084838b60ff168151811061109957611099611fe6565b60200260200101516110ab9190611e40565b6110b59190611e53565b8a600a018a60ff16815481106110cd576110cd611fe6565b906000526020600020018190555086828960ff16815181106110f1576110f1611fe6565b60200260200101516111039190611e53565b8a600a018960ff168154811061111b5761111b611fe6565b600091825260209091200155801561118057808a600b018a60ff168154811061114657611146611fe6565b906000526020600020015461115b9190611e40565b8a600b018a60ff168154811061117357611173611fe6565b6000918252602090912001555b895460408051868152602081018a905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b60606108e68484600085611438565b6000808460ff168660ff16036112455760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c660000000000000000006044820152606401610a8d565b60008760090180548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b815481526020019060010190808311611281575b5050505050905060006112a88583611513565b905080518860ff161080156112c0575080518760ff16105b6113015760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b6044820152606401610a8d565b600061130c8a61161e565b9050600061131a8383611629565b9050838960ff168151811061133157611331611fe6565b6020026020010151886113449190611ffc565b838a60ff168151811061135957611359611fe6565b602002602001015161136b9190611e53565b838a60ff168151811061138057611380611fe6565b602002602001018181525050600061139a838c86856117d6565b9050838b60ff16815181106113b1576113b1611fe6565b60200260200101518160016113c69190611e40565b6113d09190611e53565b96506402540be4008c60050154886113e89190611ffc565b6113f29190612013565b9550848b60ff168151811061140957611409611fe6565b6020026020010151868861141d9190611e40565b6114279190612013565b965050505050509550959350505050565b6060824710156114995760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a8d565b600080866001600160a01b031685876040516114b59190612035565b60006040518083038185875af1925050503d80600081146114f2576040519150601f19603f3d011682016040523d82523d6000602084013e6114f7565b606091505b5091509150611508878383876119c5565b979650505050505050565b815181516060919081146115605760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610a8d565b60008167ffffffffffffffff81111561157b5761157b611c4b565b6040519080825280602002602001820160405280156115a4578160200160208202803683370190505b50905060005b82811015611615578481815181106115c4576115c4611fe6565b60200260200101518682815181106115de576115de611fe6565b60200260200101516115f09190611ffc565b82828151811061160257611602611fe6565b60209081029190910101526001016115aa565b50949350505050565b600061061c82611a3e565b815160009081805b828110156116685785818151811061164b5761164b611fe6565b60200260200101518261165e9190611e40565b9150600101611631565b508060000361167c5760009250505061061c565b6000818161168a8588611ffc565b905060005b610100811015611797578260005b878110156116e857878b82815181106116b8576116b8611fe6565b60200260200101516116ca9190611ffc565b6116d48684611ffc565b6116de9190612013565b915060010161169d565b50839450808760016116fa9190611e40565b6117049190611ffc565b6064856117118287611e53565b61171b9190611ffc565b6117259190612013565b61172f9190611e40565b8461173a8984611ffc565b60646117468a88611ffc565b6117509190612013565b61175a9190611e40565b6117649190611ffc565b61176e9190612013565b935061177a8486611a87565b1561178e578397505050505050505061061c565b5060010161168f565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610a8d565b815160009060ff8516811161181f5760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610a8d565b8260008061182d848a611ffc565b905060005b848110156118af578860ff1681146118a75787818151811061185657611856611fe6565b6020026020010151836118699190611e40565b92508488828151811061187e5761187e611fe6565b60200260200101516118909190611ffc565b61189a8886611ffc565b6118a49190612013565b93505b600101611832565b506118ba8482611ffc565b60646118c68886611ffc565b6118d09190611ffc565b6118da9190612013565b92506000816118ea606489611ffc565b6118f49190612013565b6118fe9084611e40565b9050600087815b61010081101561197c5781925089848360026119219190611ffc565b61192b9190611e40565b6119359190611e53565b876119408480611ffc565b61194a9190611e40565b6119549190612013565b91506119608284611a87565b15611974575096506108e695505050505050565b600101611905565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610a8d565b60608315611a34578251600003611a2d576001600160a01b0385163b611a2d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a8d565b50816108e6565b6108e68383611a9d565b600481015460028201546001830154909190808314801590611a5f57508142105b15611a80576000846003015490508083038142038502428503840201049350505b5050919050565b60006002611a958484611ac7565b109392505050565b815115611aad5781518083602001fd5b8060405162461bcd60e51b8152600401610a8d9190612051565b600081831115611ae257611adb8284611e53565b905061061c565b610bf98383611e53565b600060208284031215611afe57600080fd5b5035919050565b80356001600160a01b0381168114611b1c57600080fd5b919050565b600060208284031215611b3357600080fd5b610bf982611b05565b60006101a08284031215611b4f57600080fd5b50919050565b60008060008060808587031215611b6b57600080fd5b843567ffffffffffffffff811115611b8257600080fd5b611b8e87828801611b3c565b945050611b9d60208601611b05565b93969395505050506040820135916060013590565b60008060008060808587031215611bc857600080fd5b843567ffffffffffffffff811115611bdf57600080fd5b611beb87828801611b3c565b97602087013597506040870135966060013595509350505050565b634e487b7160e01b600052602160045260246000fd5b803563ffffffff81168114611b1c57600080fd5b600060208284031215611c4257600080fd5b610bf982611c1c565b634e487b7160e01b600052604160045260246000fd5b6040516101a0810167ffffffffffffffff81118282101715611c8557611c85611c4b565b60405290565b8015158114611c9957600080fd5b50565b8035611b1c81611c8b565b600082601f830112611cb857600080fd5b813567ffffffffffffffff80821115611cd357611cd3611c4b565b604051601f8301601f19908116603f01168101908282118183101715611cfb57611cfb611c4b565b81604052838152866020858801011115611d1457600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101a08236031215611d4757600080fd5b611d4f611c61565b611d5883611c1c565b8152611d6660208401611c1c565b6020820152611d7760408401611c1c565b6040820152611d8860608401611b05565b6060820152611d9960808401611b05565b6080820152611daa60a08401611c9c565b60a082015260c083013567ffffffffffffffff811115611dc957600080fd5b611dd536828601611ca7565b60c08301525060e083013560e0820152610100611df3818501611b05565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b634e487b7160e01b600052601160045260246000fd5b8082018082111561061c5761061c611e2a565b8181038181111561061c5761061c611e2a565b60005b83811015611e81578181015183820152602001611e69565b50506000910152565b60008151808452611ea2816020860160208601611e66565b601f01601f19169290920160200192915050565b60208152611ecd60208201835163ffffffff169052565b60006020830151611ee6604084018263ffffffff169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160a01b03811660a08401525060a083015180151560c08401525060c08301516101a08060e0850152611f4d6101c0850183611e8a565b60e086015161010086810191909152860151909250610120611f79818701836001600160a01b03169052565b8601516101408681019190915286015161016080870191909152860151610180808701919091529095015193019290925250919050565b600060208284031215611fc257600080fd5b5051919050565b600060208284031215611fdb57600080fd5b8151610bf981611c8b565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761061c5761061c611e2a565b60008261203057634e487b7160e01b600052601260045260246000fd5b500490565b60008251612047818460208701611e66565b9190910192915050565b602081526000610bf96020830184611e8a56fea26469706673582212205a7599f8cc2b0eeacfe93c9edf2cc765dba615fb7d1b5be1dc73ffcaea7ad62664736f6c63430008110033", + "devdoc": { + "events": { + "AavePoolUpdated(address,address)": { + "params": { + "caller": "- The account that called the function", + "updated": "- The updated address" + } + }, + "AavePortalFeeUpdated(uint256,address)": { + "params": { + "caller": "- The account that called the function", + "updated": "- The updated fee numerator" + } + }, + "AavePortalRepayment(bytes32,address,uint256,uint256,address)": { + "params": { + "amount": "- The amount that was repaid", + "asset": "- The asset that was repaid", + "fee": "- The fee amount that was repaid", + "transferId": "- The transfer debt that was repaid" + } + } + }, + "kind": "dev", + "methods": { + "repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)": { + "details": "The router must be approved for portal and with enough liquidity, and must be the caller of this function. If the asset is not whitelisted, must use the `repayAavePortalFor` function.", + "params": { + "_backingAmount": "The principle to be paid (in adopted asset)", + "_feeAmount": "The fee to be paid (in adopted asset)", + "_maxIn": "The max value of the local asset to swap for the _backingAmount of adopted asset", + "_params": "TransferInfo associated with the transfer" + } + }, + "repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)": { + "details": "Should always be paying in the backing asset for the aave loan. NOTE: This will *NOT* work if an asset is removed.", + "params": { + "_backingAmount": "Amount of principle to repay", + "_feeAmount": "Amount of fees to repay", + "_params": "TransferInfo associated with the transfer", + "_portalAsset": "The asset you borrowed (adopted asset)" + } + }, + "setAavePool(address)": { + "details": "Allows to set the aavePool to address zero to disable Aave Portal if needed", + "params": { + "_aavePool": "The address of the Aave Pool contract" + } + }, + "setAavePortalFee(uint256)": { + "params": { + "_aavePortalFeeNumerator": "The new value for the Aave Portal fee numerator" + } + } + }, + "version": 1 + }, + "userdoc": { + "events": { + "AavePoolUpdated(address,address)": { + "notice": "Emitted `setAavePool` is updated" + }, + "AavePortalFeeUpdated(uint256,address)": { + "notice": "Emitted `setAavePortalFee` is updated" + }, + "AavePortalRepayment(bytes32,address,uint256,uint256,address)": { + "notice": "Emitted when a repayment on an Aave portal loan is made" + } + }, + "kind": "user", + "methods": { + "repayAavePortal((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),uint256,uint256,uint256)": { + "notice": "Used by routers to perform a manual repayment to Aave Portals to cover any outstanding debt" + }, + "repayAavePortalFor((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address,uint256,uint256)": { + "notice": "This allows anyone to repay the portal in the adopted asset for a given router and transfer" + }, + "setAavePool(address)": { + "notice": "Sets the Aave Pool contract address." + }, + "setAavePortalFee(uint256)": { + "notice": "Sets the Aave Portal fee numerator" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/PortalFacet.sol:PortalFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/ProposedOwnableFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/ProposedOwnableFacetStaging.json new file mode 100644 index 0000000000..d9ebe034ae --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/ProposedOwnableFacetStaging.json @@ -0,0 +1,1317 @@ +{ + "address": "0xF28Eeca075D63886C6152672b926CF89d9782780", + "abi": [ + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnableFacet__revokeRole_invalidInput", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "AssignRoleAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "AssignRoleRouter", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "AssignRoleWatcher", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "revokedAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum Role", + "name": "revokedRole", + "type": "uint8" + } + ], + "name": "RevokeRole", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "RouterAllowlistRemovalProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "renounced", + "type": "bool" + } + ], + "name": "RouterAllowlistRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "name": "assignRoleAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "assignRoleRouterAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "assignRoleWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposeRouterAllowlistRemoval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_role", + "type": "address" + } + ], + "name": "queryRole", + "outputs": [ + { + "internalType": "enum Role", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "removeRouterAllowlist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_revoke", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistRemoved", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "routerAllowlistTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xc277337e14c84f6ba9f6661b806bc61cdd547d264315b07a832f0404f7a95e2d", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "813557", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2310176c7124d5513cfa71193a7119e3ab2d4167fa960ce26b060679b2fe5e3a", + "transactionHash": "0xc277337e14c84f6ba9f6661b806bc61cdd547d264315b07a832f0404f7a95e2d", + "logs": [], + "blockNumber": 2894795, + "cumulativeGasUsed": "864119", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__assignRoleAdmin_invalidInput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__assignRoleRouter_invalidInput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__assignRoleWatcher_invalidInput\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__delayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__removeAssetAllowlist_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__removeRouterAllowlist_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnableFacet__revokeRole_invalidInput\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"AssignRoleAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"AssignRoleRouter\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcher\",\"type\":\"address\"}],\"name\":\"AssignRoleWatcher\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"revokedAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"enum Role\",\"name\":\"revokedRole\",\"type\":\"uint8\"}],\"name\":\"RevokeRole\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"RouterAllowlistRemovalProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"renounced\",\"type\":\"bool\"}],\"name\":\"RouterAllowlistRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"assignRoleAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"assignRoleRouterAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcher\",\"type\":\"address\"}],\"name\":\"assignRoleWatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposeRouterAllowlistRemoval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_role\",\"type\":\"address\"}],\"name\":\"queryRole\",\"outputs\":[{\"internalType\":\"enum Role\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeRouterAllowlist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_revoke\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"routerAllowlistRemoved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"routerAllowlistTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.The majority of this code was taken from the openzeppelin Ownable contract\",\"kind\":\"dev\",\"methods\":{\"assignRoleAdmin(address)\":{\"details\":\"requested address will be allowlisted as Role.Admin under mapping roles\",\"params\":{\"_admin\":\"- The address to beassigned as Role.Admin under roles\"}},\"assignRoleRouterAdmin(address)\":{\"details\":\"requested address will be whitelisted as Role.RouterAdmin under mapping roles\",\"params\":{\"_router\":\"- The address to be assigned as Role.RouterAdmin under roles\"}},\"assignRoleWatcher(address)\":{\"details\":\"requested address will be allowlisted as Role.Watcher under mapping roles\",\"params\":{\"_watcher\":\"- The address to be assigned as Role.Watcher under roles\"}},\"queryRole(address)\":{\"details\":\"returns uint value of representing enum value of Role\",\"params\":{\"_role\":\"The address for which Role need to be queried\"}},\"revokeRole(address)\":{\"details\":\"input address will be assingned default value i.e Role.None under mapping roles\",\"params\":{\"_revoke\":\"- The address to be revoked from it's Role\"}}},\"title\":\"ProposedOwnableFacet\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the proposed owner.\"},\"assignRoleAdmin(address)\":{\"notice\":\"Use to assign an address Admin role Address with Admin role has permission to all else of Router & Watcher role Can only be called by Owner or Role.Admin\"},\"assignRoleRouterAdmin(address)\":{\"notice\":\"Use to assign an address Router role Address with Router has permission to add new router Can only be called by Owner or Role.RouterAdmin\"},\"assignRoleWatcher(address)\":{\"notice\":\"Use to assign an address Watcher role Address with Watcher role has permission to pause Can only be called by Owner or Role.Admin\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"paused()\":{\"notice\":\"Returns if paused or not.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposeRouterAllowlistRemoval()\":{\"notice\":\"Indicates if the ownership of the router allowlist has been renounced\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"queryRole(address)\":{\"notice\":\"Returns the Role of the address\"},\"removeRouterAllowlist()\":{\"notice\":\"Indicates if the ownership of the asset allowlist has been renounced\"},\"revokeRole(address)\":{\"notice\":\"Use to revoke the Role of an address to None Can only be called by Owner or Role.Admin\"},\"routerAllowlistRemoved()\":{\"notice\":\"Returns if the router allowlist is removed.\"},\"routerAllowlistTimestamp()\":{\"notice\":\"Returns the timestamp when router allowlist was last proposed to be removed\"}},\"notice\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed via a two step process: 1. Call `proposeOwner` 2. Wait out the delay period 3. Call `acceptOwner`\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/ProposedOwnableFacet.sol\":\"ProposedOwnableFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/ProposedOwnableFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {IProposedOwnable} from \\\"../../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnableFacet\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\ncontract ProposedOwnableFacet is BaseConnextFacet, IProposedOwnable {\\n // ========== Custom Errors ===========\\n error ProposedOwnableFacet__delayElapsed_delayNotElapsed();\\n error ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange();\\n error ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange();\\n error ProposedOwnableFacet__removeRouterAllowlist_noProposal();\\n error ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange();\\n error ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange();\\n error ProposedOwnableFacet__removeAssetAllowlist_noProposal();\\n error ProposedOwnableFacet__proposeNewOwner_invalidProposal();\\n error ProposedOwnableFacet__proposeNewOwner_noOwnershipChange();\\n error ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange();\\n error ProposedOwnableFacet__revokeRole_invalidInput();\\n error ProposedOwnableFacet__assignRoleRouter_invalidInput();\\n error ProposedOwnableFacet__assignRoleWatcher_invalidInput();\\n error ProposedOwnableFacet__assignRoleAdmin_invalidInput();\\n\\n // ============ Events ============\\n\\n event RouterAllowlistRemovalProposed(uint256 timestamp);\\n\\n event RouterAllowlistRemoved(bool renounced);\\n\\n event RevokeRole(address revokedAddress, Role revokedRole);\\n\\n event AssignRoleRouter(address router);\\n\\n event AssignRoleWatcher(address watcher);\\n\\n event AssignRoleAdmin(address admin);\\n\\n event Paused();\\n\\n event Unpaused();\\n\\n // ============ Modifier ============\\n /**\\n * @notice Reverts the call if the expected delay has not elapsed.\\n * @param start Timestamp marking the beginning of the delay period.\\n */\\n modifier delayElapsed(uint256 start) {\\n // Ensure delay has elapsed\\n if ((block.timestamp - start) <= delay()) revert ProposedOwnableFacet__delayElapsed_delayNotElapsed();\\n _;\\n }\\n\\n // ============ External: Getters ============\\n\\n /**\\n * @notice Returns the address of the current owner.\\n */\\n function owner() public view returns (address) {\\n return LibDiamond.contractOwner();\\n }\\n\\n /**\\n * @notice Returns if the router allowlist is removed.\\n */\\n function routerAllowlistRemoved() public view returns (bool) {\\n return s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposed() public view returns (address) {\\n return s._proposed;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposedTimestamp() public view returns (uint256) {\\n return s._proposedOwnershipTimestamp;\\n }\\n\\n /**\\n * @notice Returns the timestamp when router allowlist was last proposed to be removed\\n */\\n function routerAllowlistTimestamp() public view returns (uint256) {\\n return s._routerAllowlistTimestamp;\\n }\\n\\n /**\\n * @notice Returns the delay period before a new owner can be accepted.\\n */\\n function delay() public view returns (uint256) {\\n return LibDiamond.acceptanceDelay();\\n }\\n\\n /**\\n * @notice Returns if paused or not.\\n */\\n function paused() public view returns (bool) {\\n return s._paused;\\n }\\n\\n /**\\n * @notice Returns the Role of the address\\n * @dev returns uint value of representing enum value of Role\\n * @param _role The address for which Role need to be queried\\n */\\n function queryRole(address _role) public view returns (Role) {\\n return s.roles[_role];\\n }\\n\\n // ============ External ============\\n\\n /**\\n * @notice Indicates if the ownership of the router allowlist has\\n * been renounced\\n */\\n function proposeRouterAllowlistRemoval() public onlyOwnerOrAdmin {\\n // Use contract as source of truth\\n // Will fail if all ownership is renounced by modifier\\n if (s._routerAllowlistRemoved) revert ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange();\\n\\n // Begin delay, emit event\\n _setRouterAllowlistTimestamp();\\n }\\n\\n /**\\n * @notice Indicates if the ownership of the asset allowlist has\\n * been renounced\\n */\\n function removeRouterAllowlist() public onlyOwnerOrAdmin delayElapsed(s._routerAllowlistTimestamp) {\\n // Contract as sounce of truth\\n // Will fail if all ownership is renounced by modifier\\n if (s._routerAllowlistRemoved) revert ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange();\\n\\n // Ensure there has been a proposal cycle started\\n if (s._routerAllowlistTimestamp == 0) revert ProposedOwnableFacet__removeRouterAllowlist_noProposal();\\n\\n // Set renounced, emit event, reset timestamp to 0\\n _setRouterAllowlistRemoved(true);\\n }\\n\\n /**\\n * @notice Sets the timestamp for an owner to be proposed, and sets the\\n * newly proposed owner as step 1 in a 2-step process\\n */\\n function proposeNewOwner(address newlyProposed) public onlyOwner {\\n // Contract as source of truth\\n if (s._proposed == newlyProposed || newlyProposed == address(0))\\n revert ProposedOwnableFacet__proposeNewOwner_invalidProposal();\\n\\n // Sanity check: reasonable proposal\\n if (owner() == newlyProposed) revert ProposedOwnableFacet__proposeNewOwner_noOwnershipChange();\\n\\n _setProposed(newlyProposed);\\n }\\n\\n /**\\n * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the proposed owner.\\n */\\n function acceptProposedOwner() public onlyProposed delayElapsed(s._proposedOwnershipTimestamp) {\\n // Contract as source of truth\\n if (owner() == s._proposed) revert ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange();\\n\\n // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n // the only time this would happen is if the _proposed was never\\n // set (will fail from modifier) or if the owner == _proposed (checked\\n // above)\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(s._proposed);\\n }\\n\\n /**\\n * @notice Use to revoke the Role of an address to None\\n * Can only be called by Owner or Role.Admin\\n * @dev input address will be assingned default value i.e Role.None under mapping roles\\n * @param _revoke - The address to be revoked from it's Role\\n */\\n function revokeRole(address _revoke) public onlyOwnerOrAdmin {\\n // Use contract as source of truth\\n // Will fail if candidate isn't assinged any Role OR input address is addressZero\\n Role revokedRole = s.roles[_revoke];\\n if (revokedRole == Role.None || _revoke == address(0)) revert ProposedOwnableFacet__revokeRole_invalidInput();\\n\\n s.roles[_revoke] = Role.None;\\n emit RevokeRole(_revoke, revokedRole);\\n }\\n\\n /**\\n * @notice Use to assign an address Router role\\n * Address with Router has permission to add new router\\n * Can only be called by Owner or Role.RouterAdmin\\n * @dev requested address will be whitelisted as Role.RouterAdmin under mapping roles\\n * @param _router - The address to be assigned as Role.RouterAdmin under roles\\n */\\n function assignRoleRouterAdmin(address _router) public onlyOwnerOrAdmin {\\n // Use contract as source of truth\\n // Will fail if candidate is already added OR input address is addressZero\\n if (s.roles[_router] != Role.None || _router == address(0))\\n revert ProposedOwnableFacet__assignRoleRouter_invalidInput();\\n\\n s.roles[_router] = Role.RouterAdmin;\\n emit AssignRoleRouter(_router);\\n }\\n\\n /**\\n * @notice Use to assign an address Watcher role\\n * Address with Watcher role has permission to pause\\n * Can only be called by Owner or Role.Admin\\n * @dev requested address will be allowlisted as Role.Watcher under mapping roles\\n * @param _watcher - The address to be assigned as Role.Watcher under roles\\n */\\n function assignRoleWatcher(address _watcher) public onlyOwnerOrAdmin {\\n // Use contract as source of truth\\n // Will fail if candidate is already added OR input address is addressZero\\n if (s.roles[_watcher] != Role.None || _watcher == address(0))\\n revert ProposedOwnableFacet__assignRoleWatcher_invalidInput();\\n\\n s.roles[_watcher] = Role.Watcher;\\n emit AssignRoleWatcher(_watcher);\\n }\\n\\n /**\\n * @notice Use to assign an address Admin role\\n * Address with Admin role has permission to all else of Router & Watcher role\\n * Can only be called by Owner or Role.Admin\\n * @dev requested address will be allowlisted as Role.Admin under mapping roles\\n * @param _admin - The address to beassigned as Role.Admin under roles\\n */\\n function assignRoleAdmin(address _admin) public onlyOwnerOrAdmin {\\n // Use contract as source of truth\\n // Will fail if candidate is already added OR input address is addressZero\\n if (s.roles[_admin] != Role.None || _admin == address(0))\\n revert ProposedOwnableFacet__assignRoleAdmin_invalidInput();\\n\\n s.roles[_admin] = Role.Admin;\\n emit AssignRoleAdmin(_admin);\\n }\\n\\n function pause() public onlyOwnerOrWatcher {\\n s._paused = true;\\n emit Paused();\\n }\\n\\n function unpause() public onlyOwnerOrAdmin {\\n delete s._paused;\\n emit Unpaused();\\n }\\n\\n ////// INTERNAL //////\\n\\n function _setRouterAllowlistTimestamp() private {\\n s._routerAllowlistTimestamp = block.timestamp;\\n emit RouterAllowlistRemovalProposed(block.timestamp);\\n }\\n\\n function _setRouterAllowlistRemoved(bool value) private {\\n s._routerAllowlistRemoved = value;\\n delete s._routerAllowlistTimestamp;\\n emit RouterAllowlistRemoved(value);\\n }\\n\\n function _setOwner(address newOwner) private {\\n delete s._proposedOwnershipTimestamp;\\n delete s._proposed;\\n LibDiamond.setContractOwner(newOwner);\\n }\\n\\n function _setProposed(address newlyProposed) private {\\n s._proposedOwnershipTimestamp = block.timestamp;\\n s._proposed = newlyProposed;\\n emit OwnershipProposed(newlyProposed);\\n }\\n}\\n\",\"keccak256\":\"0x9f56898c59fa169a13888e6b0292769d86eb2d74dd17a615713e160c93ea1e5b\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n /**\\n * @dev This emits when change in ownership of a contract is proposed.\\n */\\n event OwnershipProposed(address indexed proposedOwner);\\n\\n /**\\n * @dev This emits when ownership of a contract changes.\\n */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @notice Get the address of the owner\\n * @return owner_ The address of the owner.\\n */\\n function owner() external view returns (address owner_);\\n\\n /**\\n * @notice Get the address of the proposed owner\\n * @return proposed_ The address of the proposed.\\n */\\n function proposed() external view returns (address proposed_);\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n * @param newlyProposed The proposed new owner of the contract\\n */\\n function proposeNewOwner(address newlyProposed) external;\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n */\\n function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610db6806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638456cb59116100a2578063bb271a2711610071578063bb271a27146101f1578063c56ce35814610204578063c5b350df1461020c578063c91cb56a14610214578063d1851c921461024d57600080fd5b80638456cb59146101a35780638da5cb5b146101ab578063a9943b1b146101cb578063b1f8100d146101de57600080fd5b80633f4ba83a116100e95780633f4ba83a146101575780635c975abb1461015f5780636a42b8f81461017d5780636be557851461018557806380e52e3f1461019057600080fd5b8063122329371461011b57806323986f7d146101325780632ec0c0021461013c5780633cf52ffb1461014f575b600080fd5b6013545b6040519081526020015b60405180910390f35b61013a61025e565b005b61013a61014a366004610cc6565b610347565b60115461011f565b61013a610463565b601a54600160a01b900460ff165b6040519015158152602001610129565b61011f6104fd565b60125460ff1661016d565b61013a61019e366004610cc6565b61052c565b61013a61064c565b6101b36106ec565b6040516001600160a01b039091168152602001610129565b61013a6101d9366004610cc6565b6106f6565b61013a6101ec366004610cc6565b61080b565b61013a6101ff366004610cc6565b6108be565b61013a6109d2565b61013a610a62565b610240610222366004610cc6565b6001600160a01b031660009081526014602052604090205460ff1690565b6040516101299190610d2e565b6010546001600160a01b03166101b3565b33610267610b10565b6001600160a01b0316141580156102a2575060033360009081526014602052604090205460ff16600381111561029f5761029f610cf6565b14155b156102c057604051637b32c26b60e01b815260040160405180910390fd5b6013546102cb6104fd565b6102d58242610d42565b116102f357604051637f0369a960e11b815260040160405180910390fd5b60125460ff161561031757604051634b4da55560e01b815260040160405180910390fd5b60135460000361033a576040516368ad12e160e11b815260040160405180910390fd5b6103446001610b3e565b50565b33610350610b10565b6001600160a01b03161415801561038b575060033360009081526014602052604090205460ff16600381111561038857610388610cf6565b14155b156103a957604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff1660038111156103d6576103d6610cf6565b1415806103ea57506001600160a01b038116155b15610408576040516319f546ad60e11b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600117905590519182527ff294e68c632d2c26e3d36129816c9a3e54bfa0ebada89d07d08e15e87a8e240391015b60405180910390a150565b3361046c610b10565b6001600160a01b0316141580156104a7575060033360009081526014602052604090205460ff1660038111156104a4576104a4610cf6565b14155b156104c557604051637b32c26b60e01b815260040160405180910390fd5b601a805460ff60a01b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b60006105277fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13225490565b905090565b33610535610b10565b6001600160a01b031614158015610570575060033360009081526014602052604090205460ff16600381111561056d5761056d610cf6565b14155b1561058e57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16908160038111156105bd576105bd610cf6565b14806105d057506001600160a01b038216155b156105ee57604051630e15d72960e31b815260040160405180910390fd5b6001600160a01b03821660009081526014602052604090819020805460ff19169055517fdc6f53b47a9dfbea7a15fceef0cd84711d3d79ccc0952111866167af5e59e264906106409084908490610d63565b60405180910390a15050565b33610655610b10565b6001600160a01b031614158015610690575060023360009081526014602052604090205460ff16600381111561068d5761068d610cf6565b14155b156106ae5760405163bae4c01f60e01b815260040160405180910390fd5b601a805460ff60a01b1916600160a01b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000610527610b10565b336106ff610b10565b6001600160a01b03161415801561073a575060033360009081526014602052604090205460ff16600381111561073757610737610cf6565b14155b1561075857604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16600381111561078557610785610cf6565b14158061079957506001600160a01b038116155b156107b757604051630bceab9d60e01b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600217905590519182527ffaac289281b8fc57dff30d0ff38b071d28bb5f24cd5ed1bd2379d6fb27f714dd9101610458565b33610814610b10565b6001600160a01b03161461083b576040516314e74a2560e21b815260040160405180910390fd5b6010546001600160a01b038281169116148061085e57506001600160a01b038116155b1561087c57604051630274ac4360e21b815260040160405180910390fd5b806001600160a01b031661088e6106ec565b6001600160a01b0316036108b557604051631f677f5160e01b815260040160405180910390fd5b61034481610b84565b336108c7610b10565b6001600160a01b031614158015610902575060033360009081526014602052604090205460ff1660038111156108ff576108ff610cf6565b14155b1561092057604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16600381111561094d5761094d610cf6565b14158061096157506001600160a01b038116155b1561097f57604051631600e74560e31b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600317905590519182527e0a317382a4189d8763d4a024ec833785cebd3580a084ff0f887f156b822cb19101610458565b336109db610b10565b6001600160a01b031614158015610a16575060033360009081526014602052604090205460ff166003811115610a1357610a13610cf6565b14155b15610a3457604051637b32c26b60e01b815260040160405180910390fd5b60125460ff1615610a58576040516333bfb93f60e11b815260040160405180910390fd5b610a60610bd2565b565b6010546001600160a01b03163314610a8d57604051631b54eee360e11b815260040160405180910390fd5b601154610a986104fd565b610aa28242610d42565b11610ac057604051637f0369a960e11b815260040160405180910390fd5b6010546001600160a01b0316610ad46106ec565b6001600160a01b031603610afb576040516355cc507960e01b815260040160405180910390fd5b601054610344906001600160a01b0316610c0d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6012805460ff191682151590811790915560006013556040519081527f7c21a455b42ac52b1f1cc1103db5afe532e817479e9503a97a734720271c5a7490602001610458565b42601155601080546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b4260138190556040519081527feb0f48d74c7254e5b55ef91a3f6e496e6a4a8676b6dae07f3d6fb0805b9fac939060200160405180910390a1565b60006011819055601080546001600160a01b03191690557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546040516103449284927fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c926001600160a01b03808616939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215610cd857600080fd5b81356001600160a01b0381168114610cef57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fd5b60048110610d2a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d3c8284610d0c565b92915050565b81810381811115610d3c57634e487b7160e01b600052601160045260246000fd5b6001600160a01b038316815260408101610cef6020830184610d0c56fea26469706673582212205c7e5e78dca52f6b343007220dede1a7cb761f9d9397a24618a3bf3b4b33046164736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638456cb59116100a2578063bb271a2711610071578063bb271a27146101f1578063c56ce35814610204578063c5b350df1461020c578063c91cb56a14610214578063d1851c921461024d57600080fd5b80638456cb59146101a35780638da5cb5b146101ab578063a9943b1b146101cb578063b1f8100d146101de57600080fd5b80633f4ba83a116100e95780633f4ba83a146101575780635c975abb1461015f5780636a42b8f81461017d5780636be557851461018557806380e52e3f1461019057600080fd5b8063122329371461011b57806323986f7d146101325780632ec0c0021461013c5780633cf52ffb1461014f575b600080fd5b6013545b6040519081526020015b60405180910390f35b61013a61025e565b005b61013a61014a366004610cc6565b610347565b60115461011f565b61013a610463565b601a54600160a01b900460ff165b6040519015158152602001610129565b61011f6104fd565b60125460ff1661016d565b61013a61019e366004610cc6565b61052c565b61013a61064c565b6101b36106ec565b6040516001600160a01b039091168152602001610129565b61013a6101d9366004610cc6565b6106f6565b61013a6101ec366004610cc6565b61080b565b61013a6101ff366004610cc6565b6108be565b61013a6109d2565b61013a610a62565b610240610222366004610cc6565b6001600160a01b031660009081526014602052604090205460ff1690565b6040516101299190610d2e565b6010546001600160a01b03166101b3565b33610267610b10565b6001600160a01b0316141580156102a2575060033360009081526014602052604090205460ff16600381111561029f5761029f610cf6565b14155b156102c057604051637b32c26b60e01b815260040160405180910390fd5b6013546102cb6104fd565b6102d58242610d42565b116102f357604051637f0369a960e11b815260040160405180910390fd5b60125460ff161561031757604051634b4da55560e01b815260040160405180910390fd5b60135460000361033a576040516368ad12e160e11b815260040160405180910390fd5b6103446001610b3e565b50565b33610350610b10565b6001600160a01b03161415801561038b575060033360009081526014602052604090205460ff16600381111561038857610388610cf6565b14155b156103a957604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff1660038111156103d6576103d6610cf6565b1415806103ea57506001600160a01b038116155b15610408576040516319f546ad60e11b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600117905590519182527ff294e68c632d2c26e3d36129816c9a3e54bfa0ebada89d07d08e15e87a8e240391015b60405180910390a150565b3361046c610b10565b6001600160a01b0316141580156104a7575060033360009081526014602052604090205460ff1660038111156104a4576104a4610cf6565b14155b156104c557604051637b32c26b60e01b815260040160405180910390fd5b601a805460ff60a01b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b60006105277fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c13225490565b905090565b33610535610b10565b6001600160a01b031614158015610570575060033360009081526014602052604090205460ff16600381111561056d5761056d610cf6565b14155b1561058e57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16908160038111156105bd576105bd610cf6565b14806105d057506001600160a01b038216155b156105ee57604051630e15d72960e31b815260040160405180910390fd5b6001600160a01b03821660009081526014602052604090819020805460ff19169055517fdc6f53b47a9dfbea7a15fceef0cd84711d3d79ccc0952111866167af5e59e264906106409084908490610d63565b60405180910390a15050565b33610655610b10565b6001600160a01b031614158015610690575060023360009081526014602052604090205460ff16600381111561068d5761068d610cf6565b14155b156106ae5760405163bae4c01f60e01b815260040160405180910390fd5b601a805460ff60a01b1916600160a01b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b6000610527610b10565b336106ff610b10565b6001600160a01b03161415801561073a575060033360009081526014602052604090205460ff16600381111561073757610737610cf6565b14155b1561075857604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16600381111561078557610785610cf6565b14158061079957506001600160a01b038116155b156107b757604051630bceab9d60e01b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600217905590519182527ffaac289281b8fc57dff30d0ff38b071d28bb5f24cd5ed1bd2379d6fb27f714dd9101610458565b33610814610b10565b6001600160a01b03161461083b576040516314e74a2560e21b815260040160405180910390fd5b6010546001600160a01b038281169116148061085e57506001600160a01b038116155b1561087c57604051630274ac4360e21b815260040160405180910390fd5b806001600160a01b031661088e6106ec565b6001600160a01b0316036108b557604051631f677f5160e01b815260040160405180910390fd5b61034481610b84565b336108c7610b10565b6001600160a01b031614158015610902575060033360009081526014602052604090205460ff1660038111156108ff576108ff610cf6565b14155b1561092057604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03811660009081526014602052604081205460ff16600381111561094d5761094d610cf6565b14158061096157506001600160a01b038116155b1561097f57604051631600e74560e31b815260040160405180910390fd5b6001600160a01b038116600081815260146020908152604091829020805460ff1916600317905590519182527e0a317382a4189d8763d4a024ec833785cebd3580a084ff0f887f156b822cb19101610458565b336109db610b10565b6001600160a01b031614158015610a16575060033360009081526014602052604090205460ff166003811115610a1357610a13610cf6565b14155b15610a3457604051637b32c26b60e01b815260040160405180910390fd5b60125460ff1615610a58576040516333bfb93f60e11b815260040160405180910390fd5b610a60610bd2565b565b6010546001600160a01b03163314610a8d57604051631b54eee360e11b815260040160405180910390fd5b601154610a986104fd565b610aa28242610d42565b11610ac057604051637f0369a960e11b815260040160405180910390fd5b6010546001600160a01b0316610ad46106ec565b6001600160a01b031603610afb576040516355cc507960e01b815260040160405180910390fd5b601054610344906001600160a01b0316610c0d565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6012805460ff191682151590811790915560006013556040519081527f7c21a455b42ac52b1f1cc1103db5afe532e817479e9503a97a734720271c5a7490602001610458565b42601155601080546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b4260138190556040519081527feb0f48d74c7254e5b55ef91a3f6e496e6a4a8676b6dae07f3d6fb0805b9fac939060200160405180910390a1565b60006011819055601080546001600160a01b03191690557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546040516103449284927fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c926001600160a01b03808616939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215610cd857600080fd5b81356001600160a01b0381168114610cef57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fd5b60048110610d2a57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610d3c8284610d0c565b92915050565b81810381811115610d3c57634e487b7160e01b600052601160045260246000fd5b6001600160a01b038316815260408101610cef6020830184610d0c56fea26469706673582212205c7e5e78dca52f6b343007220dede1a7cb761f9d9397a24618a3bf3b4b33046164736f6c63430008110033", + "devdoc": { + "details": "This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.The majority of this code was taken from the openzeppelin Ownable contract", + "kind": "dev", + "methods": { + "assignRoleAdmin(address)": { + "details": "requested address will be allowlisted as Role.Admin under mapping roles", + "params": { + "_admin": "- The address to beassigned as Role.Admin under roles" + } + }, + "assignRoleRouterAdmin(address)": { + "details": "requested address will be whitelisted as Role.RouterAdmin under mapping roles", + "params": { + "_router": "- The address to be assigned as Role.RouterAdmin under roles" + } + }, + "assignRoleWatcher(address)": { + "details": "requested address will be allowlisted as Role.Watcher under mapping roles", + "params": { + "_watcher": "- The address to be assigned as Role.Watcher under roles" + } + }, + "queryRole(address)": { + "details": "returns uint value of representing enum value of Role", + "params": { + "_role": "The address for which Role need to be queried" + } + }, + "revokeRole(address)": { + "details": "input address will be assingned default value i.e Role.None under mapping roles", + "params": { + "_revoke": "- The address to be revoked from it's Role" + } + } + }, + "title": "ProposedOwnableFacet", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "acceptProposedOwner()": { + "notice": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the proposed owner." + }, + "assignRoleAdmin(address)": { + "notice": "Use to assign an address Admin role Address with Admin role has permission to all else of Router & Watcher role Can only be called by Owner or Role.Admin" + }, + "assignRoleRouterAdmin(address)": { + "notice": "Use to assign an address Router role Address with Router has permission to add new router Can only be called by Owner or Role.RouterAdmin" + }, + "assignRoleWatcher(address)": { + "notice": "Use to assign an address Watcher role Address with Watcher role has permission to pause Can only be called by Owner or Role.Admin" + }, + "delay()": { + "notice": "Returns the delay period before a new owner can be accepted." + }, + "owner()": { + "notice": "Returns the address of the current owner." + }, + "paused()": { + "notice": "Returns if paused or not." + }, + "proposeNewOwner(address)": { + "notice": "Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process" + }, + "proposeRouterAllowlistRemoval()": { + "notice": "Indicates if the ownership of the router allowlist has been renounced" + }, + "proposed()": { + "notice": "Returns the address of the proposed owner." + }, + "proposedTimestamp()": { + "notice": "Returns the address of the proposed owner." + }, + "queryRole(address)": { + "notice": "Returns the Role of the address" + }, + "removeRouterAllowlist()": { + "notice": "Indicates if the ownership of the asset allowlist has been renounced" + }, + "revokeRole(address)": { + "notice": "Use to revoke the Role of an address to None Can only be called by Owner or Role.Admin" + }, + "routerAllowlistRemoved()": { + "notice": "Returns if the router allowlist is removed." + }, + "routerAllowlistTimestamp()": { + "notice": "Returns the timestamp when router allowlist was last proposed to be removed" + } + }, + "notice": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed via a two step process: 1. Call `proposeOwner` 2. Wait out the delay period 3. Call `acceptOwner`", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/ProposedOwnableFacet.sol:ProposedOwnableFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/RelayerFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/RelayerFacetStaging.json new file mode 100644 index 0000000000..124f23fe28 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/RelayerFacetStaging.json @@ -0,0 +1,1033 @@ +{ + "address": "0x5cC220030AFf5a2068A62FEaC09553f0B6604f60", + "abi": [ + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__addRelayer_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__removeRelayer_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newVault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerFeeVaultUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "relayer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RelayerRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "addRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "approvedRelayers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "relayerFeeVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayer", + "type": "address" + } + ], + "name": "removeRelayer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_relayerFeeVault", + "type": "address" + } + ], + "name": "setRelayerFeeVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xaf357664a1a6768b8de54a2b576e303e2f25427d35b920d782011ea141e5198d", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "303290", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x734686cf7ac20fad4086c4e08344cd09b3e80c5ef67f49cfb709b2edcb111a8d", + "transactionHash": "0xaf357664a1a6768b8de54a2b576e303e2f25427d35b920d782011ea141e5198d", + "logs": [], + "blockNumber": 2894806, + "cumulativeGasUsed": "353852", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerFacet__addRelayer_alreadyApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerFacet__removeRelayer_notApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RelayerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldVault\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newVault\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RelayerFeeVaultUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RelayerRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"addRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"approvedRelayers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"relayerFeeVault\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"removeRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayerFeeVault\",\"type\":\"address\"}],\"name\":\"setRelayerFeeVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RelayerAdded(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"relayer\":\"- The relayer address to be added or removed\"}},\"RelayerFeeVaultUpdated(address,address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"newVault\":\"- The relayerFeeVault new value\",\"oldVault\":\"- The relayerFeeVault old value\"}},\"RelayerRemoved(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"relayer\":\"- The relayer address to be added or removed\"}}},\"kind\":\"dev\",\"methods\":{\"addRelayer(address)\":{\"params\":{\"_relayer\":\"- The relayer address to add\"}},\"removeRelayer(address)\":{\"params\":{\"_relayer\":\"- The relayer address to remove\"}},\"setRelayerFeeVault(address)\":{\"params\":{\"_relayerFeeVault\":\"The address of the new router\"}}},\"version\":1},\"userdoc\":{\"events\":{\"RelayerAdded(address,address)\":{\"notice\":\"Emitted when a relayer is added or removed from allowlists\"},\"RelayerFeeVaultUpdated(address,address,address)\":{\"notice\":\"Emitted when the relayerFeeVault variable is updated\"},\"RelayerRemoved(address,address)\":{\"notice\":\"Emitted when a relayer is added or removed from allowlists\"}},\"kind\":\"user\",\"methods\":{\"addRelayer(address)\":{\"notice\":\"Used to add approved relayer\"},\"removeRelayer(address)\":{\"notice\":\"Used to remove approved relayer\"},\"setRelayerFeeVault(address)\":{\"notice\":\"Updates the relayer fee router\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/RelayerFacet.sol\":\"RelayerFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/RelayerFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\ncontract RelayerFacet is BaseConnextFacet {\\n // ========== Custom Errors ===========\\n error RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault();\\n error RelayerFacet__addRelayer_alreadyApproved();\\n error RelayerFacet__removeRelayer_notApproved();\\n\\n // ========== Events ===========\\n /**\\n * @notice Emitted when the relayerFeeVault variable is updated\\n * @param oldVault - The relayerFeeVault old value\\n * @param newVault - The relayerFeeVault new value\\n * @param caller - The account that called the function\\n */\\n event RelayerFeeVaultUpdated(address oldVault, address newVault, address caller);\\n\\n /**\\n * @notice Emitted when a relayer is added or removed from allowlists\\n * @param relayer - The relayer address to be added or removed\\n * @param caller - The account that called the function\\n */\\n event RelayerAdded(address relayer, address caller);\\n\\n /**\\n * @notice Emitted when a relayer is added or removed from allowlists\\n * @param relayer - The relayer address to be added or removed\\n * @param caller - The account that called the function\\n */\\n event RelayerRemoved(address relayer, address caller);\\n\\n // ============ Modifiers ============\\n\\n // ============ Getters ============\\n\\n function approvedRelayers(address _relayer) public view returns (bool) {\\n return s.approvedRelayers[_relayer];\\n }\\n\\n function relayerFeeVault() external view returns (address) {\\n return s.relayerFeeVault;\\n }\\n\\n // ============ Admin functions ============\\n\\n /**\\n * @notice Updates the relayer fee router\\n * @param _relayerFeeVault The address of the new router\\n */\\n function setRelayerFeeVault(address _relayerFeeVault) external onlyOwnerOrAdmin {\\n address old = address(s.relayerFeeVault);\\n if (old == _relayerFeeVault) revert RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault();\\n\\n s.relayerFeeVault = _relayerFeeVault;\\n emit RelayerFeeVaultUpdated(old, _relayerFeeVault, msg.sender);\\n }\\n\\n /**\\n * @notice Used to add approved relayer\\n * @param _relayer - The relayer address to add\\n */\\n function addRelayer(address _relayer) external onlyOwnerOrAdmin {\\n if (s.approvedRelayers[_relayer]) revert RelayerFacet__addRelayer_alreadyApproved();\\n s.approvedRelayers[_relayer] = true;\\n\\n emit RelayerAdded(_relayer, msg.sender);\\n }\\n\\n /**\\n * @notice Used to remove approved relayer\\n * @param _relayer - The relayer address to remove\\n */\\n function removeRelayer(address _relayer) external onlyOwnerOrAdmin {\\n if (!s.approvedRelayers[_relayer]) revert RelayerFacet__removeRelayer_notApproved();\\n delete s.approvedRelayers[_relayer];\\n\\n emit RelayerRemoved(_relayer, msg.sender);\\n }\\n}\\n\",\"keccak256\":\"0xa90ddde365e229b466492f9fe2585d1b9a41a0da6fc80b092eb7a56cf620efd3\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610482806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806360f0a5ac1461005c57806365bc8582146100715780638cba8b6a14610091578063dd39f00d146100cd578063f01b3e01146100e0575b600080fd5b61006f61006a366004610406565b6100f3565b005b6002546040516001600160a01b0390911681526020015b60405180910390f35b6100bd61009f366004610406565b6001600160a01b03166000908152600b602052604090205460ff1690565b6040519015158152602001610088565b61006f6100db366004610406565b6101eb565b61006f6100ee366004610406565b6102e0565b336100fc6103d8565b6001600160a01b031614158015610137575060033360009081526014602052604090205460ff16600381111561013457610134610436565b14155b1561015557604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1661018e5760405163050d2e7760e21b815260040160405180910390fd5b6001600160a01b0381166000818152600b6020908152604091829020805460ff19169055815192835233908301527f0bdcf1d6f29aa87af8131cc81dcbb295fcf98d71cfcdc79cc5d965317bae1d0a91015b60405180910390a150565b336101f46103d8565b6001600160a01b03161415801561022f575060033360009081526014602052604090205460ff16600381111561022c5761022c610436565b14155b1561024d57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1615610287576040516317a65d9f60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600b6020908152604091829020805460ff19166001179055815192835233908301527fd756b9aee10d6f2c80dc42c5031beb0e0847f6e1d6ba50199bdfc3f0de5cc0cc91016101e0565b336102e96103d8565b6001600160a01b031614158015610324575060033360009081526014602052604090205460ff16600381111561032157610321610436565b14155b1561034257604051637b32c26b60e01b815260040160405180910390fd5b6002546001600160a01b0390811690821681036103725760405163cbb50e4160e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915233908201527f81ccf12657606de24814d9c94f72fc587a18c112856a546a1669fff3cb6cac2b9060600160405180910390a15050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b60006020828403121561041857600080fd5b81356001600160a01b038116811461042f57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212205c5d8ef238e7e3a44619d21e5a671b17d3d943a2731f96edf662c2679ed5f53764736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806360f0a5ac1461005c57806365bc8582146100715780638cba8b6a14610091578063dd39f00d146100cd578063f01b3e01146100e0575b600080fd5b61006f61006a366004610406565b6100f3565b005b6002546040516001600160a01b0390911681526020015b60405180910390f35b6100bd61009f366004610406565b6001600160a01b03166000908152600b602052604090205460ff1690565b6040519015158152602001610088565b61006f6100db366004610406565b6101eb565b61006f6100ee366004610406565b6102e0565b336100fc6103d8565b6001600160a01b031614158015610137575060033360009081526014602052604090205460ff16600381111561013457610134610436565b14155b1561015557604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1661018e5760405163050d2e7760e21b815260040160405180910390fd5b6001600160a01b0381166000818152600b6020908152604091829020805460ff19169055815192835233908301527f0bdcf1d6f29aa87af8131cc81dcbb295fcf98d71cfcdc79cc5d965317bae1d0a91015b60405180910390a150565b336101f46103d8565b6001600160a01b03161415801561022f575060033360009081526014602052604090205460ff16600381111561022c5761022c610436565b14155b1561024d57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152600b602052604090205460ff1615610287576040516317a65d9f60e31b815260040160405180910390fd5b6001600160a01b0381166000818152600b6020908152604091829020805460ff19166001179055815192835233908301527fd756b9aee10d6f2c80dc42c5031beb0e0847f6e1d6ba50199bdfc3f0de5cc0cc91016101e0565b336102e96103d8565b6001600160a01b031614158015610324575060033360009081526014602052604090205460ff16600381111561032157610321610436565b14155b1561034257604051637b32c26b60e01b815260040160405180910390fd5b6002546001600160a01b0390811690821681036103725760405163cbb50e4160e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b03848116918217909255604080519284168352602083019190915233908201527f81ccf12657606de24814d9c94f72fc587a18c112856a546a1669fff3cb6cac2b9060600160405180910390a15050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b60006020828403121561041857600080fd5b81356001600160a01b038116811461042f57600080fd5b9392505050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212205c5d8ef238e7e3a44619d21e5a671b17d3d943a2731f96edf662c2679ed5f53764736f6c63430008110033", + "devdoc": { + "events": { + "RelayerAdded(address,address)": { + "params": { + "caller": "- The account that called the function", + "relayer": "- The relayer address to be added or removed" + } + }, + "RelayerFeeVaultUpdated(address,address,address)": { + "params": { + "caller": "- The account that called the function", + "newVault": "- The relayerFeeVault new value", + "oldVault": "- The relayerFeeVault old value" + } + }, + "RelayerRemoved(address,address)": { + "params": { + "caller": "- The account that called the function", + "relayer": "- The relayer address to be added or removed" + } + } + }, + "kind": "dev", + "methods": { + "addRelayer(address)": { + "params": { + "_relayer": "- The relayer address to add" + } + }, + "removeRelayer(address)": { + "params": { + "_relayer": "- The relayer address to remove" + } + }, + "setRelayerFeeVault(address)": { + "params": { + "_relayerFeeVault": "The address of the new router" + } + } + }, + "version": 1 + }, + "userdoc": { + "events": { + "RelayerAdded(address,address)": { + "notice": "Emitted when a relayer is added or removed from allowlists" + }, + "RelayerFeeVaultUpdated(address,address,address)": { + "notice": "Emitted when the relayerFeeVault variable is updated" + }, + "RelayerRemoved(address,address)": { + "notice": "Emitted when a relayer is added or removed from allowlists" + } + }, + "kind": "user", + "methods": { + "addRelayer(address)": { + "notice": "Used to add approved relayer" + }, + "removeRelayer(address)": { + "notice": "Used to remove approved relayer" + }, + "setRelayerFeeVault(address)": { + "notice": "Updates the relayer fee router" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/RelayerFacet.sol:RelayerFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/RoutersFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/RoutersFacetStaging.json new file mode 100644 index 0000000000..b2250a03e3 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/RoutersFacetStaging.json @@ -0,0 +1,1997 @@ +{ + "address": "0x97477e71B0dacd9581bf43bEcC1DB95d6b0A998E", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_capReached", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouterForPortal_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__approveRouter_routerEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__initializeRouter_configNotEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_badRouter", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__proposeRouterOwner_notNewOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterOwner_noChange", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__setRouterRecipient_notNewRecipient", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouterForPortal_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "RoutersFacet__unapproveRouter_routerEmpty", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "liquidityFeeNumerator", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityFeeNumeratorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxRoutersPerTransfer", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MaxRoutersPerTransferUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterApprovedForPortal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + } + ], + "name": "RouterInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "local", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterLiquidityRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "RouterOwnerAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevProposed", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newProposed", + "type": "address" + } + ], + "name": "RouterOwnerProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "prevRecipient", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newRecipient", + "type": "address" + } + ], + "name": "RouterRecipientSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "router", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RouterUnapprovedForPortal", + "type": "event" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_DENOMINATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "LIQUIDITY_FEE_NUMERATOR", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "acceptProposedRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "name": "addRouterLiquidity", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_local", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "addRouterLiquidityFor", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "approveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getProposedRouterOwnerTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterApprovalForPortal", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "getRouterRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "initializeRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxRoutersPerTransfer", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_proposed", + "type": "address" + } + ], + "name": "proposeRouterOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + } + ], + "name": "removeRouterLiquidity", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "_to", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "removeRouterLiquidityFor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_asset", + "type": "address" + } + ], + "name": "routerBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_numerator", + "type": "uint256" + } + ], + "name": "setLiquidityFeeNumerator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_newMaxRouters", + "type": "uint256" + } + ], + "name": "setMaxRoutersPerTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + } + ], + "name": "setRouterRecipient", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "name": "unapproveRouterForPortal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x6c6e8e0a0b6d5e22c75d166bf71d9d3dadd5bad1ac69a4eeefeaf7c2c11fa14e", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1816697", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x92193f0dbf4abe85e5896883c134a7984b851551f8de4fe6ad5b1398309aef85", + "transactionHash": "0x6c6e8e0a0b6d5e22c75d166bf71d9d3dadd5bad1ac69a4eeefeaf7c2c11fa14e", + "logs": [], + "blockNumber": 2894811, + "cumulativeGasUsed": "1867259", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__acceptProposedRouterOwner_badCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__acceptProposedRouterOwner_notElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__addLiquidityForRouter_amountIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__addLiquidityForRouter_badRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__addLiquidityForRouter_capReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__addLiquidityForRouter_routerEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__approveRouterForPortal_alreadyApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__approveRouterForPortal_notAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__approveRouter_alreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__approveRouter_routerEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__initializeRouter_configNotEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__onlyRouterOwner_notRouterOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__proposeRouterOwner_badRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__proposeRouterOwner_notNewOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__removeRouterLiquidityFor_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__removeRouterLiquidity_amountIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__removeRouterLiquidity_insufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__removeRouterLiquidity_recipientEmpty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setLiquidityFeeNumerator_tooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setLiquidityFeeNumerator_tooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setRouterOwner_noChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__setRouterRecipient_notNewRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__unapproveRouterForPortal_notApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__unapproveRouter_notAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RoutersFacet__unapproveRouter_routerEmpty\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidityFeeNumerator\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"LiquidityFeeNumeratorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxRoutersPerTransfer\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"MaxRoutersPerTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterApprovedForPortal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"RouterInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterLiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"local\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterLiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prevOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"RouterOwnerAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prevProposed\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newProposed\",\"type\":\"address\"}],\"name\":\"RouterOwnerProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"prevRecipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRecipient\",\"type\":\"address\"}],\"name\":\"RouterRecipientSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RouterUnapprovedForPortal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LIQUIDITY_FEE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LIQUIDITY_FEE_NUMERATOR\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"acceptProposedRouterOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"}],\"name\":\"addRouterLiquidity\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"addRouterLiquidityFor\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"approveRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"approveRouterForPortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getProposedRouterOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getProposedRouterOwnerTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterApproval\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterApprovalForPortal\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"getRouterRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"name\":\"initializeRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxRoutersPerTransfer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_proposed\",\"type\":\"address\"}],\"name\":\"proposeRouterOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"removeRouterLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"removeRouterLiquidityFor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"routerBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_numerator\",\"type\":\"uint256\"}],\"name\":\"setLiquidityFeeNumerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxRouters\",\"type\":\"uint256\"}],\"name\":\"setMaxRoutersPerTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"}],\"name\":\"setRouterRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"unapproveRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_router\",\"type\":\"address\"}],\"name\":\"unapproveRouterForPortal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"LiquidityFeeNumeratorUpdated(uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"liquidityFeeNumerator\":\"- The LIQUIDITY_FEE_NUMERATOR new value\"}},\"MaxRoutersPerTransferUpdated(uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"maxRoutersPerTransfer\":\"- The maxRoutersPerTransfer new value\"}},\"RouterAdded(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"router\":\"- The address of the added router\"}},\"RouterApprovedForPortal(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"router\":\"- The address of the approved router\"}},\"RouterInitialized(address)\":{\"details\":\"This does not confer permissions onto the router, only the configuration\",\"params\":{\"router\":\"The router initialized\"}},\"RouterLiquidityAdded(address,address,bytes32,uint256,address)\":{\"params\":{\"amount\":\"- The amount of liquidity added\",\"caller\":\"- The account that called the function\",\"key\":\"- The hash of the canonical id and domain\",\"local\":\"- The address of the token added (all liquidity held in local asset)\",\"router\":\"- The address of the router the funds were credited to\"}},\"RouterLiquidityRemoved(address,address,address,bytes32,uint256,address)\":{\"params\":{\"amount\":\"- The amount of liquidity withdrawn\",\"caller\":\"- The account that called the function\",\"local\":\"- The address of the token withdrawn\",\"router\":\"- The router you are removing liquidity from\",\"to\":\"- The address the funds were withdrawn to\"}},\"RouterOwnerAccepted(address,address,address)\":{\"params\":{\"newOwner\":\"- The address of the new owner of the router\",\"prevOwner\":\"- The address of the previous owner of the router\",\"router\":\"- The address of the added router\"}},\"RouterOwnerProposed(address,address,address)\":{\"params\":{\"newProposed\":\"- The address of the new proposed\",\"prevProposed\":\"- The address of the previous proposed\",\"router\":\"- The address of the added router\"}},\"RouterRecipientSet(address,address,address)\":{\"params\":{\"newRecipient\":\"- The address of the new recipient of the router\",\"prevRecipient\":\"- The address of the previous recipient of the router\",\"router\":\"- The address of the added router\"}},\"RouterRemoved(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"router\":\"- The address of the removed router\"}},\"RouterUnapprovedForPortal(address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"router\":\"- The address of the disapproved router\"}}},\"kind\":\"dev\",\"methods\":{\"acceptProposedRouterOwner(address)\":{\"params\":{\"_router\":\"Router address to set recipient\"}},\"addRouterLiquidity(uint256,address)\":{\"details\":\"The liquidity will be held in the local asset, which is the representation if you are *not* on the canonical domain, and the canonical asset otherwise.\",\"params\":{\"_amount\":\"- The amount of liquidity to add for the router\",\"_local\":\"- The address of the asset you're adding liquidity for. If adding liquidity of the native asset, routers may use `address(0)` or the wrapped asset\"}},\"addRouterLiquidityFor(uint256,address,address)\":{\"details\":\"The liquidity will be held in the local asset, which is the representation if you are *not* on the canonical domain, and the canonical asset otherwise.\",\"params\":{\"_amount\":\"- The amount of liquidity to add for the router\",\"_local\":\"- The address of the asset you're adding liquidity for. If adding liquidity of the native asset, routers may use `address(0)` or the wrapped asset\",\"_router\":\"The router you are adding liquidity on behalf of\"}},\"approveRouter(address)\":{\"params\":{\"_router\":\"Router address to setup\"}},\"approveRouterForPortal(address)\":{\"params\":{\"_router\":\"- The router address to approve\"}},\"getProposedRouterOwner(address)\":{\"details\":\"All routers must wait for the delay timeout before accepting a new owner\",\"params\":{\"_router\":\"The relevant router address\"}},\"getProposedRouterOwnerTimestamp(address)\":{\"details\":\"All routers must wait for the delay timeout before accepting a new owner\",\"params\":{\"_router\":\"The relevant router address\"}},\"getRouterApproval(address)\":{\"params\":{\"_router\":\"The relevant router address\"}},\"getRouterApprovalForPortal(address)\":{\"params\":{\"_router\":\"The relevant router address\"}},\"getRouterOwner(address)\":{\"params\":{\"_router\":\"The relevant router address\"}},\"getRouterRecipient(address)\":{\"details\":\"The recipient (if set) receives all funds when router liquidity is removed\",\"params\":{\"_router\":\"The relevant router address\"}},\"initializeRouter(address,address)\":{\"details\":\"Does not set allowlisting permissions, only owner and recipient\",\"params\":{\"_owner\":\"The owner (can change recipient, proposes new owners)\",\"_recipient\":\"Where liquidity will be withdrawn to\"}},\"proposeRouterOwner(address,address)\":{\"details\":\"If routers burn their ownership, they can no longer update the recipient\",\"params\":{\"_proposed\":\"Proposed owner Address to set to router\",\"_router\":\"Router address to set recipient\"}},\"removeRouterLiquidity((uint32,bytes32),uint256,address)\":{\"details\":\"Using the `_canonical` information in the interface instead of the local asset to allow routers to remove liquidity even if the asset is delisted\",\"params\":{\"_amount\":\"- The amount of liquidity to remove for the router\",\"_canonical\":\"The canonical token information in plaintext\",\"_to\":\"The address that will receive the liquidity being removed if no router recipient exists.\"}},\"removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)\":{\"details\":\"Using the `_canonical` information in the interface instead of the local asset to allow routers to remove liquidity even if the asset is delisted\",\"params\":{\"_amount\":\"- The amount of liquidity to remove for the router native asset, routers may use `address(0)` or the wrapped asset\",\"_canonical\":\"The canonical token information in plaintext\",\"_router\":\"The address of the router\",\"_to\":\"The address that will receive the liquidity being removed\"}},\"setLiquidityFeeNumerator(uint256)\":{\"details\":\"Admin can set LIQUIDITY_FEE_NUMERATOR variable, Liquidity fee should be less than 5%\",\"params\":{\"_numerator\":\"new LIQUIDITY_FEE_NUMERATOR\"}},\"setMaxRoutersPerTransfer(uint256)\":{\"params\":{\"_newMaxRouters\":\"The new max amount of routers\"}},\"setRouterRecipient(address,address)\":{\"details\":\"Router should only be able to set this once otherwise if router key compromised, no problem is solved since attacker could just update recipient\",\"params\":{\"_recipient\":\"Recipient Address to set to router\",\"_router\":\"Router address to set recipient\"}},\"unapproveRouter(address)\":{\"params\":{\"_router\":\"Router address to remove\"}},\"unapproveRouterForPortal(address)\":{\"params\":{\"_router\":\"- The router address to remove approval\"}}},\"version\":1},\"userdoc\":{\"events\":{\"LiquidityFeeNumeratorUpdated(uint256,address)\":{\"notice\":\"Emitted when the LIQUIDITY_FEE_NUMERATOR variable is updated\"},\"MaxRoutersPerTransferUpdated(uint256,address)\":{\"notice\":\"Emitted when the maxRoutersPerTransfer variable is updated\"},\"RouterAdded(address,address)\":{\"notice\":\"Emitted when a new router is added\"},\"RouterApprovedForPortal(address,address)\":{\"notice\":\"Emitted when a router is approved for Portal\"},\"RouterInitialized(address)\":{\"notice\":\"Emitted when a router adds a config via `addRouterConfig`\"},\"RouterLiquidityAdded(address,address,bytes32,uint256,address)\":{\"notice\":\"Emitted when a router adds liquidity to the contract\"},\"RouterLiquidityRemoved(address,address,address,bytes32,uint256,address)\":{\"notice\":\"Emitted when a router withdraws liquidity from the contract\"},\"RouterOwnerAccepted(address,address,address)\":{\"notice\":\"Emitted when the owner of router is accepted\"},\"RouterOwnerProposed(address,address,address)\":{\"notice\":\"Emitted when the owner of router is proposed\"},\"RouterRecipientSet(address,address,address)\":{\"notice\":\"Emitted when the recipient of router is updated\"},\"RouterRemoved(address,address)\":{\"notice\":\"Emitted when an existing router is removed\"},\"RouterUnapprovedForPortal(address,address)\":{\"notice\":\"Emitted when a router is disapproved for Portal\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedRouterOwner(address)\":{\"notice\":\"New router owner must accept role, or previous if proposed is 0x0\"},\"addRouterLiquidity(uint256,address)\":{\"notice\":\"This is used by any router to increase their available liquidity for a given asset.\"},\"addRouterLiquidityFor(uint256,address,address)\":{\"notice\":\"This is used by anyone to increase a router's available liquidity for a given asset.\"},\"approveRouter(address)\":{\"notice\":\"Used to allowlist a given router\"},\"approveRouterForPortal(address)\":{\"notice\":\"Allow router to use Portals\"},\"getProposedRouterOwner(address)\":{\"notice\":\"Returns the currently proposed router owner\"},\"getProposedRouterOwnerTimestamp(address)\":{\"notice\":\"Returns the currently proposed router owner timestamp\"},\"getRouterApproval(address)\":{\"notice\":\"Returns the approved router for the given router address\"},\"getRouterApprovalForPortal(address)\":{\"notice\":\"Returns whether the router is approved for portals or not\"},\"getRouterOwner(address)\":{\"notice\":\"Returns the router owner if it is set, or the router itself if not\"},\"getRouterRecipient(address)\":{\"notice\":\"Returns the recipient for the specified router\"},\"initializeRouter(address,address)\":{\"notice\":\"Can be called by anyone to set a config for their router (the msg.sender)\"},\"proposeRouterOwner(address,address)\":{\"notice\":\"Current owner or router may propose a new router owner\"},\"removeRouterLiquidity((uint32,bytes32),uint256,address)\":{\"notice\":\"This is used by any router to decrease their available liquidity for a given asset.\"},\"removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)\":{\"notice\":\"This is used by any router owner to decrease their available liquidity for a given asset.\"},\"setLiquidityFeeNumerator(uint256)\":{\"notice\":\"Sets the LIQUIDITY_FEE_NUMERATOR\"},\"setMaxRoutersPerTransfer(uint256)\":{\"notice\":\"Used to set the max amount of routers a payment can be routed through\"},\"setRouterRecipient(address,address)\":{\"notice\":\"Sets the designated recipient for a router\"},\"unapproveRouter(address)\":{\"notice\":\"Used to remove routers that can transact crosschain\"},\"unapproveRouterForPortal(address)\":{\"notice\":\"Remove router access to use Portals\"}},\"notice\":\"This contract is designed to manage router access, meaning it maintains the router recipients, owners, and the router allowlist itself. As a router, there are three important permissions: `router` - this is the address that will sign bids sent to the sequencer `routerRecipient` - this is the address that receives funds when liquidity is withdrawn `routerOwner` - this is the address permitted to update recipients and propose new owners In cases where the owner is not set, the caller should be the `router` itself. In cases where the `routerRecipient` is not set, the funds can be removed to anywhere. When setting a new `routerOwner`, the current owner (or router) must create a proposal, which can be accepted by the proposed owner after the delay period. If the proposed owner is the empty address, then it must be accepted by the current owner.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/RoutersFacet.sol\":\"RoutersFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/RoutersFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {RouterConfig} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\n/**\\n * @notice\\n * This contract is designed to manage router access, meaning it maintains the\\n * router recipients, owners, and the router allowlist itself.\\n *\\n * As a router, there are three important permissions:\\n * `router` - this is the address that will sign bids sent to the sequencer\\n * `routerRecipient` - this is the address that receives funds when liquidity is withdrawn\\n * `routerOwner` - this is the address permitted to update recipients and propose new owners\\n *\\n * In cases where the owner is not set, the caller should be the `router` itself. In cases where the\\n * `routerRecipient` is not set, the funds can be removed to anywhere.\\n *\\n * When setting a new `routerOwner`, the current owner (or router) must create a proposal, which\\n * can be accepted by the proposed owner after the delay period. If the proposed owner is the empty\\n * address, then it must be accepted by the current owner.\\n */\\ncontract RoutersFacet is BaseConnextFacet {\\n // ========== Custom Errors ===========\\n error RoutersFacet__acceptProposedRouterOwner_notElapsed();\\n error RoutersFacet__acceptProposedRouterOwner_badCaller();\\n error RoutersFacet__initializeRouter_configNotEmpty();\\n error RoutersFacet__setRouterRecipient_notNewRecipient();\\n error RoutersFacet__onlyRouterOwner_notRouterOwner();\\n error RoutersFacet__unapproveRouter_routerEmpty();\\n error RoutersFacet__unapproveRouter_notAdded();\\n error RoutersFacet__approveRouter_routerEmpty();\\n error RoutersFacet__approveRouter_alreadyAdded();\\n error RoutersFacet__proposeRouterOwner_notNewOwner();\\n error RoutersFacet__proposeRouterOwner_badRouter();\\n error RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer();\\n error RoutersFacet__addLiquidityForRouter_routerEmpty();\\n error RoutersFacet__addLiquidityForRouter_amountIsZero();\\n error RoutersFacet__addLiquidityForRouter_badRouter();\\n error RoutersFacet__addLiquidityForRouter_capReached();\\n error RoutersFacet__removeRouterLiquidity_recipientEmpty();\\n error RoutersFacet__removeRouterLiquidity_amountIsZero();\\n error RoutersFacet__removeRouterLiquidity_insufficientFunds();\\n error RoutersFacet__removeRouterLiquidityFor_notOwner();\\n error RoutersFacet__setLiquidityFeeNumerator_tooSmall();\\n error RoutersFacet__setLiquidityFeeNumerator_tooLarge();\\n error RoutersFacet__approveRouterForPortal_notAdded();\\n error RoutersFacet__approveRouterForPortal_alreadyApproved();\\n error RoutersFacet__unapproveRouterForPortal_notApproved();\\n error RoutersFacet__setRouterOwner_noChange();\\n\\n // ============ Properties ============\\n\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted when a new router is added\\n * @param router - The address of the added router\\n * @param caller - The account that called the function\\n */\\n event RouterAdded(address indexed router, address caller);\\n\\n /**\\n * @notice Emitted when an existing router is removed\\n * @param router - The address of the removed router\\n * @param caller - The account that called the function\\n */\\n event RouterRemoved(address indexed router, address caller);\\n\\n /**\\n * @notice Emitted when the recipient of router is updated\\n * @param router - The address of the added router\\n * @param prevRecipient - The address of the previous recipient of the router\\n * @param newRecipient - The address of the new recipient of the router\\n */\\n event RouterRecipientSet(address indexed router, address indexed prevRecipient, address indexed newRecipient);\\n\\n /**\\n * @notice Emitted when the owner of router is proposed\\n * @param router - The address of the added router\\n * @param prevProposed - The address of the previous proposed\\n * @param newProposed - The address of the new proposed\\n */\\n event RouterOwnerProposed(address indexed router, address indexed prevProposed, address indexed newProposed);\\n\\n /**\\n * @notice Emitted when the owner of router is accepted\\n * @param router - The address of the added router\\n * @param prevOwner - The address of the previous owner of the router\\n * @param newOwner - The address of the new owner of the router\\n */\\n event RouterOwnerAccepted(address indexed router, address indexed prevOwner, address indexed newOwner);\\n\\n /**\\n * @notice Emitted when a router adds a config via `addRouterConfig`\\n * @dev This does not confer permissions onto the router, only the configuration\\n * @param router The router initialized\\n *\\n */\\n event RouterInitialized(address indexed router);\\n\\n /**\\n * @notice Emitted when the maxRoutersPerTransfer variable is updated\\n * @param maxRoutersPerTransfer - The maxRoutersPerTransfer new value\\n * @param caller - The account that called the function\\n */\\n event MaxRoutersPerTransferUpdated(uint256 maxRoutersPerTransfer, address caller);\\n\\n /**\\n * @notice Emitted when the LIQUIDITY_FEE_NUMERATOR variable is updated\\n * @param liquidityFeeNumerator - The LIQUIDITY_FEE_NUMERATOR new value\\n * @param caller - The account that called the function\\n */\\n event LiquidityFeeNumeratorUpdated(uint256 liquidityFeeNumerator, address caller);\\n\\n /**\\n * @notice Emitted when a router is approved for Portal\\n * @param router - The address of the approved router\\n * @param caller - The account that called the function\\n */\\n event RouterApprovedForPortal(address router, address caller);\\n\\n /**\\n * @notice Emitted when a router is disapproved for Portal\\n * @param router - The address of the disapproved router\\n * @param caller - The account that called the function\\n */\\n event RouterUnapprovedForPortal(address router, address caller);\\n\\n /**\\n * @notice Emitted when a router adds liquidity to the contract\\n * @param router - The address of the router the funds were credited to\\n * @param local - The address of the token added (all liquidity held in local asset)\\n * @param key - The hash of the canonical id and domain\\n * @param amount - The amount of liquidity added\\n * @param caller - The account that called the function\\n */\\n event RouterLiquidityAdded(address indexed router, address local, bytes32 key, uint256 amount, address caller);\\n\\n /**\\n * @notice Emitted when a router withdraws liquidity from the contract\\n * @param router - The router you are removing liquidity from\\n * @param to - The address the funds were withdrawn to\\n * @param local - The address of the token withdrawn\\n * @param amount - The amount of liquidity withdrawn\\n * @param caller - The account that called the function\\n */\\n event RouterLiquidityRemoved(\\n address indexed router,\\n address to,\\n address local,\\n bytes32 key,\\n uint256 amount,\\n address caller\\n );\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Asserts caller is the router owner\\n */\\n modifier onlyRouterOwner(address _router) {\\n if (s.routerConfigs[_router].owner != msg.sender) revert RoutersFacet__onlyRouterOwner_notRouterOwner();\\n _;\\n }\\n\\n // ============ Getters ==============\\n\\n function LIQUIDITY_FEE_NUMERATOR() public view returns (uint256) {\\n return s.LIQUIDITY_FEE_NUMERATOR;\\n }\\n\\n function LIQUIDITY_FEE_DENOMINATOR() public pure returns (uint256) {\\n return Constants.BPS_FEE_DENOMINATOR;\\n }\\n\\n /**\\n * @notice Returns the approved router for the given router address\\n * @param _router The relevant router address\\n */\\n function getRouterApproval(address _router) public view returns (bool) {\\n return s.routerConfigs[_router].approved;\\n }\\n\\n /**\\n * @notice Returns the recipient for the specified router\\n * @dev The recipient (if set) receives all funds when router liquidity is removed\\n * @param _router The relevant router address\\n */\\n function getRouterRecipient(address _router) public view returns (address) {\\n return s.routerConfigs[_router].recipient;\\n }\\n\\n /**\\n * @notice Returns the router owner if it is set, or the router itself if not\\n * @param _router The relevant router address\\n */\\n function getRouterOwner(address _router) public view returns (address) {\\n return s.routerConfigs[_router].owner;\\n }\\n\\n /**\\n * @notice Returns the currently proposed router owner\\n * @dev All routers must wait for the delay timeout before accepting a new owner\\n * @param _router The relevant router address\\n */\\n function getProposedRouterOwner(address _router) public view returns (address) {\\n return s.routerConfigs[_router].proposed;\\n }\\n\\n /**\\n * @notice Returns the currently proposed router owner timestamp\\n * @dev All routers must wait for the delay timeout before accepting a new owner\\n * @param _router The relevant router address\\n */\\n function getProposedRouterOwnerTimestamp(address _router) public view returns (uint256) {\\n return s.routerConfigs[_router].proposedTimestamp;\\n }\\n\\n function maxRoutersPerTransfer() public view returns (uint256) {\\n return s.maxRoutersPerTransfer;\\n }\\n\\n function routerBalances(address _router, address _asset) public view returns (uint256) {\\n return s.routerBalances[_router][_asset];\\n }\\n\\n /**\\n * @notice Returns whether the router is approved for portals or not\\n * @param _router The relevant router address\\n */\\n function getRouterApprovalForPortal(address _router) public view returns (bool) {\\n return s.routerConfigs[_router].portalApproved;\\n }\\n\\n // ============ Admin methods ==============\\n\\n /**\\n * @notice Used to allowlist a given router\\n * @param _router Router address to setup\\n */\\n function approveRouter(address _router) external onlyOwnerOrRouter {\\n // Sanity check: not empty\\n if (_router == address(0)) revert RoutersFacet__approveRouter_routerEmpty();\\n\\n // Sanity check: needs approval\\n if (s.routerConfigs[_router].approved) revert RoutersFacet__approveRouter_alreadyAdded();\\n\\n // Approve router\\n s.routerConfigs[_router].approved = true;\\n\\n // Emit event\\n emit RouterAdded(_router, msg.sender);\\n }\\n\\n /**\\n * @notice Used to remove routers that can transact crosschain\\n * @param _router Router address to remove\\n */\\n function unapproveRouter(address _router) external onlyOwnerOrRouter {\\n // Sanity check: not empty\\n if (_router == address(0)) revert RoutersFacet__unapproveRouter_routerEmpty();\\n\\n // Sanity check: needs removal\\n RouterConfig memory config = s.routerConfigs[_router];\\n if (!config.approved) revert RoutersFacet__unapproveRouter_notAdded();\\n\\n // Update approvals in config mapping\\n delete s.routerConfigs[_router].approved;\\n delete s.routerConfigs[_router].portalApproved;\\n\\n // Emit event\\n emit RouterRemoved(_router, msg.sender);\\n }\\n\\n /**\\n * @notice Used to set the max amount of routers a payment can be routed through\\n * @param _newMaxRouters The new max amount of routers\\n */\\n function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external onlyOwnerOrAdmin {\\n if (_newMaxRouters == 0 || _newMaxRouters == s.maxRoutersPerTransfer)\\n revert RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer();\\n\\n emit MaxRoutersPerTransferUpdated(_newMaxRouters, msg.sender);\\n\\n s.maxRoutersPerTransfer = _newMaxRouters;\\n }\\n\\n /**\\n * @notice Sets the LIQUIDITY_FEE_NUMERATOR\\n * @dev Admin can set LIQUIDITY_FEE_NUMERATOR variable, Liquidity fee should be less than 5%\\n * @param _numerator new LIQUIDITY_FEE_NUMERATOR\\n */\\n function setLiquidityFeeNumerator(uint256 _numerator) external onlyOwnerOrAdmin {\\n // Slightly misleading: the liquidity fee numerator is not the amount charged,\\n // but the amount received after fees are deducted (e.g. 9995/10000 would be .005%).\\n uint256 denominator = Constants.BPS_FEE_DENOMINATOR;\\n if (_numerator < (denominator * 95) / 100) revert RoutersFacet__setLiquidityFeeNumerator_tooSmall();\\n\\n if (_numerator > denominator) revert RoutersFacet__setLiquidityFeeNumerator_tooLarge();\\n s.LIQUIDITY_FEE_NUMERATOR = _numerator;\\n\\n emit LiquidityFeeNumeratorUpdated(_numerator, msg.sender);\\n }\\n\\n /**\\n * @notice Allow router to use Portals\\n * @param _router - The router address to approve\\n */\\n function approveRouterForPortal(address _router) external onlyOwnerOrAdmin {\\n RouterConfig memory config = s.routerConfigs[_router];\\n if (!config.approved && !_isRouterAllowlistRemoved()) revert RoutersFacet__approveRouterForPortal_notAdded();\\n if (config.portalApproved) revert RoutersFacet__approveRouterForPortal_alreadyApproved();\\n\\n s.routerConfigs[_router].portalApproved = true;\\n\\n emit RouterApprovedForPortal(_router, msg.sender);\\n }\\n\\n /**\\n * @notice Remove router access to use Portals\\n * @param _router - The router address to remove approval\\n */\\n function unapproveRouterForPortal(address _router) external onlyOwnerOrAdmin {\\n if (!s.routerConfigs[_router].portalApproved) revert RoutersFacet__unapproveRouterForPortal_notApproved();\\n\\n delete s.routerConfigs[_router].portalApproved;\\n\\n emit RouterUnapprovedForPortal(_router, msg.sender);\\n }\\n\\n // ============ Public methods ==============\\n\\n /**\\n * @notice Sets the designated recipient for a router\\n * @dev Router should only be able to set this once otherwise if router key compromised,\\n * no problem is solved since attacker could just update recipient\\n * @param _router Router address to set recipient\\n * @param _recipient Recipient Address to set to router\\n */\\n function setRouterRecipient(address _router, address _recipient) external onlyRouterOwner(_router) {\\n _setRouterRecipient(_router, _recipient, s.routerConfigs[_router].recipient);\\n }\\n\\n /**\\n * @notice Current owner or router may propose a new router owner\\n * @dev If routers burn their ownership, they can no longer update the recipient\\n * @param _router Router address to set recipient\\n * @param _proposed Proposed owner Address to set to router\\n */\\n function proposeRouterOwner(address _router, address _proposed) external onlyRouterOwner(_router) {\\n // NOTE: If routers burn their ownership, they can no longer update the recipient\\n\\n // Check that proposed is different than current owner\\n RouterConfig memory config = s.routerConfigs[_router];\\n if (config.owner == _proposed) revert RoutersFacet__proposeRouterOwner_notNewOwner();\\n\\n // Check that proposed is different than current proposed\\n if (config.proposed == _proposed) revert RoutersFacet__proposeRouterOwner_badRouter();\\n\\n // Set proposed owner + timestamp\\n s.routerConfigs[_router].proposed = _proposed;\\n s.routerConfigs[_router].proposedTimestamp = block.timestamp;\\n\\n // Emit event\\n emit RouterOwnerProposed(_router, config.proposed, _proposed);\\n }\\n\\n /**\\n * @notice New router owner must accept role, or previous if proposed is 0x0\\n * @param _router Router address to set recipient\\n */\\n function acceptProposedRouterOwner(address _router) external {\\n RouterConfig memory config = s.routerConfigs[_router];\\n\\n // Check timestamp has passed\\n if (block.timestamp - config.proposedTimestamp <= Constants.GOVERNANCE_DELAY)\\n revert RoutersFacet__acceptProposedRouterOwner_notElapsed();\\n\\n // Check the caller\\n address expected = config.proposed == address(0) ? config.owner : config.proposed;\\n if (msg.sender != expected) {\\n revert RoutersFacet__acceptProposedRouterOwner_badCaller();\\n }\\n\\n // Update the current owner\\n _setRouterOwner(_router, config.proposed, config.owner);\\n\\n // Reset proposal + timestamp\\n if (config.proposed != address(0)) {\\n delete s.routerConfigs[_router].proposed;\\n }\\n delete s.routerConfigs[_router].proposedTimestamp;\\n }\\n\\n /**\\n * @notice Can be called by anyone to set a config for their router (the msg.sender)\\n * @dev Does not set allowlisting permissions, only owner and recipient\\n * @param _owner The owner (can change recipient, proposes new owners)\\n * @param _recipient Where liquidity will be withdrawn to\\n */\\n function initializeRouter(address _owner, address _recipient) external {\\n // Ensure the config is empty\\n RouterConfig memory config = s.routerConfigs[msg.sender];\\n if (\\n config.owner != address(0) ||\\n config.recipient != address(0) ||\\n config.proposed != address(0) ||\\n config.proposedTimestamp > 0\\n ) {\\n revert RoutersFacet__initializeRouter_configNotEmpty();\\n }\\n\\n // Default owner should be router\\n if (_owner == address(0)) {\\n _owner = msg.sender;\\n }\\n // Update routerOwner (zero address possible)\\n _setRouterOwner(msg.sender, _owner, address(0));\\n\\n // Update router recipient (fine to have no recipient provided)\\n if (_recipient != address(0)) {\\n _setRouterRecipient(msg.sender, _recipient, address(0));\\n }\\n\\n // Emit event\\n emit RouterInitialized(msg.sender);\\n }\\n\\n /**\\n * @notice This is used by anyone to increase a router's available liquidity for a given asset.\\n * @dev The liquidity will be held in the local asset, which is the representation if you\\n * are *not* on the canonical domain, and the canonical asset otherwise.\\n * @param _amount - The amount of liquidity to add for the router\\n * @param _local - The address of the asset you're adding liquidity for. If adding liquidity of the\\n * native asset, routers may use `address(0)` or the wrapped asset\\n * @param _router The router you are adding liquidity on behalf of\\n */\\n function addRouterLiquidityFor(\\n uint256 _amount,\\n address _local,\\n address _router\\n ) external payable nonReentrant whenNotPaused {\\n _addLiquidityForRouter(_amount, _local, _router);\\n }\\n\\n /**\\n * @notice This is used by any router to increase their available liquidity for a given asset.\\n * @dev The liquidity will be held in the local asset, which is the representation if you\\n * are *not* on the canonical domain, and the canonical asset otherwise.\\n * @param _amount - The amount of liquidity to add for the router\\n * @param _local - The address of the asset you're adding liquidity for. If adding liquidity of the\\n * native asset, routers may use `address(0)` or the wrapped asset\\n */\\n function addRouterLiquidity(uint256 _amount, address _local) external payable nonReentrant whenNotPaused {\\n _addLiquidityForRouter(_amount, _local, msg.sender);\\n }\\n\\n /**\\n * @notice This is used by any router owner to decrease their available liquidity for a given asset.\\n * @dev Using the `_canonical` information in the interface instead of the local asset to allow\\n * routers to remove liquidity even if the asset is delisted\\n * @param _canonical The canonical token information in plaintext\\n * @param _amount - The amount of liquidity to remove for the router\\n * native asset, routers may use `address(0)` or the wrapped asset\\n * @param _to The address that will receive the liquidity being removed\\n * @param _router The address of the router\\n */\\n function removeRouterLiquidityFor(\\n TokenId memory _canonical,\\n uint256 _amount,\\n address payable _to,\\n address _router\\n ) external nonReentrant whenNotPaused {\\n // Caller must be the router owner, if defined, else the router\\n address owner = s.routerConfigs[_router].owner;\\n address permissioned = owner == address(0) ? _router : owner;\\n if (msg.sender != permissioned) revert RoutersFacet__removeRouterLiquidityFor_notOwner();\\n // Remove liquidity\\n _removeLiquidityForRouter(_amount, _canonical, _to, _router);\\n }\\n\\n /**\\n * @notice This is used by any router to decrease their available liquidity for a given asset.\\n * @dev Using the `_canonical` information in the interface instead of the local asset to allow\\n * routers to remove liquidity even if the asset is delisted\\n * @param _canonical The canonical token information in plaintext\\n * @param _amount - The amount of liquidity to remove for the router\\n * @param _to The address that will receive the liquidity being removed if no router recipient exists.\\n */\\n function removeRouterLiquidity(\\n TokenId memory _canonical,\\n uint256 _amount,\\n address payable _to\\n ) external nonReentrant whenNotPaused {\\n _removeLiquidityForRouter(_amount, _canonical, _to, msg.sender);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @notice Sets the router recipient\\n * @param _router The router to set the recipient for\\n * @param _updated The recipient to set\\n * @param _previous The existing recipient\\n */\\n function _setRouterRecipient(address _router, address _updated, address _previous) internal {\\n // Check recipient is changing\\n if (_previous == _updated) revert RoutersFacet__setRouterRecipient_notNewRecipient();\\n\\n // Set new recipient\\n s.routerConfigs[_router].recipient = _updated;\\n\\n // Emit event\\n emit RouterRecipientSet(_router, _previous, _updated);\\n }\\n\\n /**\\n * @notice Sets the router owner\\n * @param _router The router to set the owner for\\n * @param _updated The owner to set\\n * @param _previous The existing owner\\n */\\n function _setRouterOwner(address _router, address _updated, address _previous) internal {\\n // Check owner is changing\\n if (_previous == _updated) revert RoutersFacet__setRouterOwner_noChange();\\n\\n // Set new owner\\n s.routerConfigs[_router].owner = _updated;\\n\\n // Emit event\\n emit RouterOwnerAccepted(_router, _previous, _updated);\\n }\\n\\n /**\\n * @notice Contains the logic to verify + increment a given routers liquidity\\n * @dev The liquidity will be held in the local asset, which is the representation if you\\n * are *not* on the canonical domain, and the canonical asset otherwise.\\n * @param _amount - The amount of liquidity to add for the router\\n * @param _local - The address of the bridge representation of the asset\\n * @param _router - The router you are adding liquidity on behalf of\\n */\\n function _addLiquidityForRouter(uint256 _amount, address _local, address _router) internal {\\n // Sanity check: router is sensible.\\n if (_router == address(0)) revert RoutersFacet__addLiquidityForRouter_routerEmpty();\\n\\n // Sanity check: nonzero amounts.\\n if (_amount == 0) revert RoutersFacet__addLiquidityForRouter_amountIsZero();\\n\\n // Get the canonical asset ID from the representation.\\n // NOTE: not using `_getApprovedCanonicalId` because candidate can *only* be local\\n TokenId memory canonical = s.representationToCanonical[_local];\\n if (canonical.domain == 0 && canonical.id == bytes32(0)) {\\n // Assume you are on the canonical domain, which does not update the above mapping\\n // If this is an incorrect assumption, the approval should fail\\n canonical.domain = s.domain;\\n canonical.id = TypeCasts.addressToBytes32(_local);\\n }\\n bytes32 key = AssetLogic.calculateCanonicalHash(canonical.id, canonical.domain);\\n if (!s.tokenConfigs[key].approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n\\n // Sanity check: router is approved.\\n if (!_isRouterAllowlistRemoved() && !getRouterApproval(_router))\\n revert RoutersFacet__addLiquidityForRouter_badRouter();\\n\\n // Transfer funds to contract.\\n AssetLogic.handleIncomingAsset(_local, _amount);\\n\\n // Update the router balances. Happens after pulling funds to account for\\n // the fee on transfer tokens.\\n s.routerBalances[_router][_local] += _amount;\\n\\n emit RouterLiquidityAdded(_router, _local, key, _amount, msg.sender);\\n }\\n\\n /**\\n * @notice This is used by any router owner to decrease their available liquidity for a given asset.\\n * @param _amount - The amount of liquidity to remove for the router\\n * @param _canonical The canonical token information in plaintext\\n * @param _to The address that will receive the liquidity being removed\\n * @param _router The address of the router\\n */\\n function _removeLiquidityForRouter(\\n uint256 _amount,\\n TokenId memory _canonical,\\n address payable _to,\\n address _router\\n ) internal {\\n // Transfer to specified recipient IF recipient not set.\\n address recipient = getRouterRecipient(_router);\\n recipient = recipient == address(0) ? _to : recipient;\\n\\n // Sanity check: to is sensible.\\n if (recipient == address(0)) revert RoutersFacet__removeRouterLiquidity_recipientEmpty();\\n\\n // Sanity check: nonzero amounts.\\n if (_amount == 0) revert RoutersFacet__removeRouterLiquidity_amountIsZero();\\n\\n bool onCanonical = _canonical.domain == s.domain;\\n\\n // Get the local asset from canonical\\n // NOTE: allow getting unapproved assets to prevent lockup on approval status change\\n // NOTE: not using `_getCanonicalTokenId` because candidate can *only* be local\\n bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n address local = onCanonical ? TypeCasts.bytes32ToAddress(_canonical.id) : s.tokenConfigs[key].representation;\\n\\n // Get existing router balance.\\n uint256 routerBalance = s.routerBalances[_router][local];\\n\\n // Sanity check: amount can be deducted for the router.\\n if (routerBalance < _amount) revert RoutersFacet__removeRouterLiquidity_insufficientFunds();\\n\\n // Update router balances.\\n unchecked {\\n s.routerBalances[_router][local] = routerBalance - _amount;\\n }\\n\\n // Transfer from contract to specified `to` address.\\n AssetLogic.handleOutgoingAsset(local, recipient, _amount);\\n\\n emit RouterLiquidityRemoved(_router, recipient, local, key, _amount, msg.sender);\\n }\\n}\\n\",\"keccak256\":\"0x38e1fef2acf0565dc8e8f2294bfb29cc83ae895c7f2ef84b1fbac91878165381\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611fd3806100206000396000f3fe60806040526004361061014b5760003560e01c806382904716116100b6578063da3a892f1161006f578063da3a892f14610416578063e9160f3e14610436578063f259cd2714610475578063f72c504814610495578063fd5bd5fe146104b5578063ffaf3f1a146104d557600080fd5b806382904716146103275780638770e68214610347578063911b8ee2146103855780639bf6d875146103a5578063b214c901146103ba578063c6bf691d146103da57600080fd5b80632d3f9ef6116101085780632d3f9ef6146102585780633b688da61461026b57806341258b5c146102bf5780634b72c5da146102df57806354064594146102f4578063582c78d21461030757600080fd5b806304376ff4146101505780630951d6d81461017257806309935b8f1461019657806312d57170146101b65780631407093b146101ef57806322a3c00714610238575b600080fd5b34801561015c57600080fd5b5061017061016b366004611c8f565b6104f5565b005b34801561017e57600080fd5b506001545b6040519081526020015b60405180910390f35b3480156101a257600080fd5b506101706101b1366004611c8f565b6105f2565b3480156101c257600080fd5b506101836101d1366004611c8f565b6001600160a01b031660009081526015602052604090206003015490565b3480156101fb57600080fd5b5061022861020a366004611c8f565b6001600160a01b031660009081526015602052604090205460ff1690565b604051901515815260200161018d565b34801561024457600080fd5b50610170610253366004611cb3565b610752565b610170610266366004611cec565b6108d1565b34801561027757600080fd5b506102a7610286366004611c8f565b6001600160a01b039081166000908152601560205260409020600201541690565b6040516001600160a01b03909116815260200161018d565b3480156102cb57600080fd5b506101836102da366004611cb3565b61093a565b3480156102eb57600080fd5b50612710610183565b610170610302366004611d2e565b610967565b34801561031357600080fd5b50610170610322366004611d53565b6109cf565b34801561033357600080fd5b50610170610342366004611d53565b610ace565b34801561035357600080fd5b50610228610362366004611c8f565b6001600160a01b0316600090815260156020526040902054610100900460ff1690565b34801561039157600080fd5b506101706103a0366004611c8f565b610b99565b3480156103b157600080fd5b50600c54610183565b3480156103c657600080fd5b506101706103d5366004611cb3565b610d0e565b3480156103e657600080fd5b506102a76103f5366004611c8f565b6001600160a01b039081166000908152601560205260409020600101541690565b34801561042257600080fd5b50610170610431366004611c8f565b610e42565b34801561044257600080fd5b506102a7610451366004611c8f565b6001600160a01b039081166000908152601560205260409020546201000090041690565b34801561048157600080fd5b50610170610490366004611c8f565b610fc5565b3480156104a157600080fd5b506101706104b0366004611ddc565b6110e2565b3480156104c157600080fd5b506101706104d0366004611e12565b611142565b3480156104e157600080fd5b506101706104f0366004611cb3565b61120c565b336104fe61127f565b6001600160a01b031614158015610539575060033360009081526014602052604090205460ff16600381111561053657610536611e64565b14155b1561055757604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116600090815260156020526040902054610100900460ff1661059557604051635d3abc4360e11b815260040160405180910390fd5b6001600160a01b038116600081815260156020908152604091829020805461ff0019169055815192835233908301527f903522f09b29fa2102f5d8d8b181ac8edb4cfaf5d705076e4ab95117f6bb02ad910160405180910390a150565b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff8082161515835261010082041615159382019390935262010000909204841692820192909252600182015483166060820152600282015490921660808301526003015460a0820181905262093a80906106749042611e90565b11610692576040516376b2ad0760e01b815260040160405180910390fd5b60808101516000906001600160a01b0316156106b25781608001516106b8565b81604001515b9050336001600160a01b038216146106e357604051633253a7bd60e01b815260040160405180910390fd5b6106f683836080015184604001516112ad565b60808201516001600160a01b031615610733576001600160a01b038316600090815260156020526040902060020180546001600160a01b03191690555b50506001600160a01b0316600090815260156020526040812060030155565b6001600160a01b038083166000908152601560205260409020548391620100009091041633146107955760405163407c584960e01b815260040160405180910390fd5b6001600160a01b03808416600090815260156020908152604091829020825160c081018452815460ff808216151583526101008204161515938201939093526201000090920484169282018390526001810154841660608301526002810154841660808301526003015460a0820152918416900361082657604051630e49614b60e31b815260040160405180910390fd5b826001600160a01b031681608001516001600160a01b03160361085c57604051631b2163f160e31b815260040160405180910390fd5b6001600160a01b038481166000818152601560205260408082206002810180546001600160a01b031916898716908117909155426003909201919091556080860151915190949190911692917fee0158b57adc03901d8b16c48cd10c33ca1283ee96c6e0d30f817ceba74dc4a191a450505050565b601654600119016108f557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561092557604051633ee5b89360e01b815260040160405180910390fd5b610930838383611348565b5050600160165550565b6001600160a01b038083166000908152600a60209081526040808320938516835292905220545b92915050565b6016546001190161098b57604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156109bb57604051633ee5b89360e01b815260040160405180910390fd5b6109c6828233611348565b50506001601655565b336109d861127f565b6001600160a01b031614158015610a13575060033360009081526014602052604090205460ff166003811115610a1057610a10611e64565b14155b15610a3157604051637b32c26b60e01b815260040160405180910390fd5b6127106064610a4182605f611ea3565b610a4b9190611eba565b821015610a6b5760405163b74bfc8360e01b815260040160405180910390fd5b80821115610a8c57604051637347083360e11b815260040160405180910390fd5b6001829055604080518381523360208201527feb6222a0b32216f861511e9aba88faa9549b749c2e0ad47df4e288565de5ceae91015b60405180910390a15050565b33610ad761127f565b6001600160a01b031614158015610b12575060033360009081526014602052604090205460ff166003811115610b0f57610b0f611e64565b14155b15610b3057604051637b32c26b60e01b815260040160405180910390fd5b801580610b3e5750600c5481145b15610b5c57604051630d9f9fad60e01b815260040160405180910390fd5b604080518281523360208201527fa7fe33308fb33ae6f3259e3c7c954ae3d6cd7f428cd17f653413c2cdc691666d910160405180910390a1600c55565b33610ba261127f565b6001600160a01b031614158015610bdd575060013360009081526014602052604090205460ff166003811115610bda57610bda611e64565b14155b15610bfb576040516360237f6b60e11b815260040160405180910390fd5b6001600160a01b038116610c225760405163085dd61360e11b815260040160405180910390fd5b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff808216151580845261010083049091161515948301949094526201000090048516938101939093526001810154841660608401526002810154909316608083015260039092015460a082015290610cb557604051632b31895f60e21b815260040160405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805461ffff1916905590513381527fbee3e974bb6a6f44f20096ede047c191eef60322e65e4ee4bd3392230a8716d5910160405180910390a25050565b33600090815260156020908152604091829020825160c081018452815460ff80821615158352610100820416151593820193909352620100009092046001600160a01b0390811693830184905260018201548116606084015260028201541660808301526003015460a082015290151580610d95575060608101516001600160a01b031615155b80610dac575060808101516001600160a01b031615155b80610dbb575060008160a00151115b15610dd957604051630efdad3160e11b815260040160405180910390fd5b6001600160a01b038316610deb573392505b610df7338460006112ad565b6001600160a01b03821615610e1257610e1233836000611539565b60405133907f2622745e83f97f2d871ef785497c1eeba6f9bb94c7dd486cf28228e814d929e490600090a2505050565b33610e4b61127f565b6001600160a01b031614158015610e86575060033360009081526014602052604090205460ff166003811115610e8357610e83611e64565b14155b15610ea457604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff808216158015808552610100840490921615159584019590955262010000909104861694820194909452600182015485166060820152600282015490941660808501526003015460a084015290610f295750610f276115cd565b155b15610f47576040516375befccb60e01b815260040160405180910390fd5b806020015115610f6a5760405163c896c2d960e01b815260040160405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805461ff001916610100179055815192835233908301527fc428fad4df337e27be8199c35a79ca103e8d00538a69b0f9701fb2bdf7d6c84c9101610ac2565b33610fce61127f565b6001600160a01b031614158015611009575060013360009081526014602052604090205460ff16600381111561100657611006611e64565b14155b15611027576040516360237f6b60e11b815260040160405180910390fd5b6001600160a01b03811661104e5760405163330ef51f60e01b815260040160405180910390fd5b6001600160a01b03811660009081526015602052604090205460ff16156110885760405163916e73bd60e01b815260040160405180910390fd5b6001600160a01b038116600081815260156020908152604091829020805460ff1916600117905590513381527fbc68405e644da2aaf25623ce2199da82c6dfd2e1de102b400eba6a091704d4f4910160405180910390a250565b6016546001190161110657604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561113657604051633ee5b89360e01b815260040160405180910390fd5b610930828483336115f4565b6016546001190161116657604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561119657604051633ee5b89360e01b815260040160405180910390fd5b6001600160a01b038082166000908152601560205260408120546201000090049091169081156111c657816111c8565b825b9050336001600160a01b038216146111f35760405163f3dc2d1960e01b815260040160405180910390fd5b6111ff858786866115f4565b5050600160165550505050565b6001600160a01b0380831660009081526015602052604090205483916201000090910416331461124f5760405163407c584960e01b815260040160405180910390fd5b6001600160a01b0380841660009081526015602052604090206001015461127a918591859116611539565b505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b816001600160a01b0316816001600160a01b0316036112df576040516309a3ec2160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260156020526040808220805462010000600160b01b031916620100008887169081029190911790915590519093851692917fd73892e8827a6025d74a01fca72a8e0d9e2c04080272e728f8861410c7d3c2d191a4505050565b6001600160a01b03811661136f576040516339773cbf60e21b815260040160405180910390fd5b8260000361139057604051632a24141960e01b815260040160405180910390fd5b6001600160a01b0382166000908152600660209081526040918290208251808401909352805463ffffffff16808452600190910154918301919091521580156113db57506020810151155b156113fb5760045463ffffffff1681526001600160a01b03831660208201525b600061140f826020015183600001516117a3565b600081815260076020526040902060020154909150600160a01b900460ff1661144b5760405163a13f958f60e01b815260040160405180910390fd5b6114536115cd565b15801561147957506001600160a01b03831660009081526015602052604090205460ff16155b1561149757604051631464c65f60e31b815260040160405180910390fd5b6114a184866117e5565b6001600160a01b038084166000908152600a60209081526040808320938816835292905290812080548792906114d8908490611edc565b9091555050604080516001600160a01b03868116825260208201849052918101879052336060820152908416907fcc3100122c1752fe0f6bfa5503175bc53eb00b5f2d774e81efedcd2b10a6d24b9060800160405180910390a25050505050565b816001600160a01b0316816001600160a01b03160361156b57604051631b0043f560e31b815260040160405180910390fd5b6001600160a01b0383811660008181526015602052604080822060010180546001600160a01b03191687861690811790915590519093851692917f31f32ebf07b0ac7fe173f7b7f3f943020d9bdc6dbfbdcdae01bd45ea78d953d791a4505050565b6000806115d861127f565b6001600160a01b031614806115ef575060125460ff165b905090565b6001600160a01b0381811660009081526015602052604090206001015416801561161e5780611620565b825b90506001600160a01b0381166116495760405163516101e760e11b815260040160405180910390fd5b8460000361166a5760405163606ab7a160e11b815260040160405180910390fd5b6004548451602086015163ffffffff8281169316929092149160009161169091906117a3565b90506000826116b6576000828152600760205260409020546001600160a01b03166116bc565b60208701515b6001600160a01b038087166000908152600a60209081526040808320938516835292905220549091508881101561170657604051630a1e6d4d60e01b815260040160405180910390fd5b6001600160a01b038087166000908152600a60209081526040808320938616835292905220898203905561173b82868b611936565b604080516001600160a01b0387811682528481166020830152918101859052606081018b9052336080820152908716907ffacf3161e9675ca1ca84a16d238bc838c7e2084c302cf411d9da7ac0391f64869060a00160405180910390a2505050505050505050565b600082826040516020016117c792919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b806000036117f1575050565b6001600160a01b03821661181857604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118859190611eef565b905061189c6001600160a01b038316333086611975565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190611eef565b6119129190611e90565b1461193057604051630e40773560e21b815260040160405180910390fd5b50505050565b8060000361194357505050565b6001600160a01b03831661196a57604051633a48ca7b60e11b815260040160405180910390fd5b61127a8383836119e0565b6040516001600160a01b03808516602483015283166044820152606481018290526119309085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a10565b6040516001600160a01b03831660248201526044810182905261127a90849063a9059cbb60e01b906064016119a9565b6000611a65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ae79092919063ffffffff16565b80519091501561127a5780806020019051810190611a839190611f08565b61127a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084015b60405180910390fd5b6060611af68484600085611afe565b949350505050565b606082471015611b5f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611ade565b600080866001600160a01b03168587604051611b7b9190611f4e565b60006040518083038185875af1925050503d8060008114611bb8576040519150601f19603f3d011682016040523d82523d6000602084013e611bbd565b606091505b5091509150611bce87838387611bd9565b979650505050505050565b60608315611c48578251600003611c41576001600160a01b0385163b611c415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611ade565b5081611af6565b611af68383815115611c5d5781518083602001fd5b8060405162461bcd60e51b8152600401611ade9190611f6a565b6001600160a01b0381168114611c8c57600080fd5b50565b600060208284031215611ca157600080fd5b8135611cac81611c77565b9392505050565b60008060408385031215611cc657600080fd5b8235611cd181611c77565b91506020830135611ce181611c77565b809150509250929050565b600080600060608486031215611d0157600080fd5b833592506020840135611d1381611c77565b91506040840135611d2381611c77565b809150509250925092565b60008060408385031215611d4157600080fd5b823591506020830135611ce181611c77565b600060208284031215611d6557600080fd5b5035919050565b600060408284031215611d7e57600080fd5b6040516040810181811067ffffffffffffffff82111715611daf57634e487b7160e01b600052604160045260246000fd5b604052905080823563ffffffff81168114611dc957600080fd5b8152602092830135920191909152919050565b600080600060808486031215611df157600080fd5b611dfb8585611d6c565b9250604084013591506060840135611d2381611c77565b60008060008060a08587031215611e2857600080fd5b611e328686611d6c565b9350604085013592506060850135611e4981611c77565b91506080850135611e5981611c77565b939692955090935050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561096157610961611e7a565b808202811582820484141761096157610961611e7a565b600082611ed757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561096157610961611e7a565b600060208284031215611f0157600080fd5b5051919050565b600060208284031215611f1a57600080fd5b81518015158114611cac57600080fd5b60005b83811015611f45578181015183820152602001611f2d565b50506000910152565b60008251611f60818460208701611f2a565b9190910192915050565b6020815260008251806020840152611f89816040850160208701611f2a565b601f01601f1916919091016040019291505056fea264697066735822122051d4f43b3d24795f25abf69caac7759074b3ccf593cc985fcd669578b08a72f964736f6c63430008110033", + "deployedBytecode": "0x60806040526004361061014b5760003560e01c806382904716116100b6578063da3a892f1161006f578063da3a892f14610416578063e9160f3e14610436578063f259cd2714610475578063f72c504814610495578063fd5bd5fe146104b5578063ffaf3f1a146104d557600080fd5b806382904716146103275780638770e68214610347578063911b8ee2146103855780639bf6d875146103a5578063b214c901146103ba578063c6bf691d146103da57600080fd5b80632d3f9ef6116101085780632d3f9ef6146102585780633b688da61461026b57806341258b5c146102bf5780634b72c5da146102df57806354064594146102f4578063582c78d21461030757600080fd5b806304376ff4146101505780630951d6d81461017257806309935b8f1461019657806312d57170146101b65780631407093b146101ef57806322a3c00714610238575b600080fd5b34801561015c57600080fd5b5061017061016b366004611c8f565b6104f5565b005b34801561017e57600080fd5b506001545b6040519081526020015b60405180910390f35b3480156101a257600080fd5b506101706101b1366004611c8f565b6105f2565b3480156101c257600080fd5b506101836101d1366004611c8f565b6001600160a01b031660009081526015602052604090206003015490565b3480156101fb57600080fd5b5061022861020a366004611c8f565b6001600160a01b031660009081526015602052604090205460ff1690565b604051901515815260200161018d565b34801561024457600080fd5b50610170610253366004611cb3565b610752565b610170610266366004611cec565b6108d1565b34801561027757600080fd5b506102a7610286366004611c8f565b6001600160a01b039081166000908152601560205260409020600201541690565b6040516001600160a01b03909116815260200161018d565b3480156102cb57600080fd5b506101836102da366004611cb3565b61093a565b3480156102eb57600080fd5b50612710610183565b610170610302366004611d2e565b610967565b34801561031357600080fd5b50610170610322366004611d53565b6109cf565b34801561033357600080fd5b50610170610342366004611d53565b610ace565b34801561035357600080fd5b50610228610362366004611c8f565b6001600160a01b0316600090815260156020526040902054610100900460ff1690565b34801561039157600080fd5b506101706103a0366004611c8f565b610b99565b3480156103b157600080fd5b50600c54610183565b3480156103c657600080fd5b506101706103d5366004611cb3565b610d0e565b3480156103e657600080fd5b506102a76103f5366004611c8f565b6001600160a01b039081166000908152601560205260409020600101541690565b34801561042257600080fd5b50610170610431366004611c8f565b610e42565b34801561044257600080fd5b506102a7610451366004611c8f565b6001600160a01b039081166000908152601560205260409020546201000090041690565b34801561048157600080fd5b50610170610490366004611c8f565b610fc5565b3480156104a157600080fd5b506101706104b0366004611ddc565b6110e2565b3480156104c157600080fd5b506101706104d0366004611e12565b611142565b3480156104e157600080fd5b506101706104f0366004611cb3565b61120c565b336104fe61127f565b6001600160a01b031614158015610539575060033360009081526014602052604090205460ff16600381111561053657610536611e64565b14155b1561055757604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116600090815260156020526040902054610100900460ff1661059557604051635d3abc4360e11b815260040160405180910390fd5b6001600160a01b038116600081815260156020908152604091829020805461ff0019169055815192835233908301527f903522f09b29fa2102f5d8d8b181ac8edb4cfaf5d705076e4ab95117f6bb02ad910160405180910390a150565b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff8082161515835261010082041615159382019390935262010000909204841692820192909252600182015483166060820152600282015490921660808301526003015460a0820181905262093a80906106749042611e90565b11610692576040516376b2ad0760e01b815260040160405180910390fd5b60808101516000906001600160a01b0316156106b25781608001516106b8565b81604001515b9050336001600160a01b038216146106e357604051633253a7bd60e01b815260040160405180910390fd5b6106f683836080015184604001516112ad565b60808201516001600160a01b031615610733576001600160a01b038316600090815260156020526040902060020180546001600160a01b03191690555b50506001600160a01b0316600090815260156020526040812060030155565b6001600160a01b038083166000908152601560205260409020548391620100009091041633146107955760405163407c584960e01b815260040160405180910390fd5b6001600160a01b03808416600090815260156020908152604091829020825160c081018452815460ff808216151583526101008204161515938201939093526201000090920484169282018390526001810154841660608301526002810154841660808301526003015460a0820152918416900361082657604051630e49614b60e31b815260040160405180910390fd5b826001600160a01b031681608001516001600160a01b03160361085c57604051631b2163f160e31b815260040160405180910390fd5b6001600160a01b038481166000818152601560205260408082206002810180546001600160a01b031916898716908117909155426003909201919091556080860151915190949190911692917fee0158b57adc03901d8b16c48cd10c33ca1283ee96c6e0d30f817ceba74dc4a191a450505050565b601654600119016108f557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561092557604051633ee5b89360e01b815260040160405180910390fd5b610930838383611348565b5050600160165550565b6001600160a01b038083166000908152600a60209081526040808320938516835292905220545b92915050565b6016546001190161098b57604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156109bb57604051633ee5b89360e01b815260040160405180910390fd5b6109c6828233611348565b50506001601655565b336109d861127f565b6001600160a01b031614158015610a13575060033360009081526014602052604090205460ff166003811115610a1057610a10611e64565b14155b15610a3157604051637b32c26b60e01b815260040160405180910390fd5b6127106064610a4182605f611ea3565b610a4b9190611eba565b821015610a6b5760405163b74bfc8360e01b815260040160405180910390fd5b80821115610a8c57604051637347083360e11b815260040160405180910390fd5b6001829055604080518381523360208201527feb6222a0b32216f861511e9aba88faa9549b749c2e0ad47df4e288565de5ceae91015b60405180910390a15050565b33610ad761127f565b6001600160a01b031614158015610b12575060033360009081526014602052604090205460ff166003811115610b0f57610b0f611e64565b14155b15610b3057604051637b32c26b60e01b815260040160405180910390fd5b801580610b3e5750600c5481145b15610b5c57604051630d9f9fad60e01b815260040160405180910390fd5b604080518281523360208201527fa7fe33308fb33ae6f3259e3c7c954ae3d6cd7f428cd17f653413c2cdc691666d910160405180910390a1600c55565b33610ba261127f565b6001600160a01b031614158015610bdd575060013360009081526014602052604090205460ff166003811115610bda57610bda611e64565b14155b15610bfb576040516360237f6b60e11b815260040160405180910390fd5b6001600160a01b038116610c225760405163085dd61360e11b815260040160405180910390fd5b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff808216151580845261010083049091161515948301949094526201000090048516938101939093526001810154841660608401526002810154909316608083015260039092015460a082015290610cb557604051632b31895f60e21b815260040160405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805461ffff1916905590513381527fbee3e974bb6a6f44f20096ede047c191eef60322e65e4ee4bd3392230a8716d5910160405180910390a25050565b33600090815260156020908152604091829020825160c081018452815460ff80821615158352610100820416151593820193909352620100009092046001600160a01b0390811693830184905260018201548116606084015260028201541660808301526003015460a082015290151580610d95575060608101516001600160a01b031615155b80610dac575060808101516001600160a01b031615155b80610dbb575060008160a00151115b15610dd957604051630efdad3160e11b815260040160405180910390fd5b6001600160a01b038316610deb573392505b610df7338460006112ad565b6001600160a01b03821615610e1257610e1233836000611539565b60405133907f2622745e83f97f2d871ef785497c1eeba6f9bb94c7dd486cf28228e814d929e490600090a2505050565b33610e4b61127f565b6001600160a01b031614158015610e86575060033360009081526014602052604090205460ff166003811115610e8357610e83611e64565b14155b15610ea457604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03808216600090815260156020908152604091829020825160c081018452815460ff808216158015808552610100840490921615159584019590955262010000909104861694820194909452600182015485166060820152600282015490941660808501526003015460a084015290610f295750610f276115cd565b155b15610f47576040516375befccb60e01b815260040160405180910390fd5b806020015115610f6a5760405163c896c2d960e01b815260040160405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805461ff001916610100179055815192835233908301527fc428fad4df337e27be8199c35a79ca103e8d00538a69b0f9701fb2bdf7d6c84c9101610ac2565b33610fce61127f565b6001600160a01b031614158015611009575060013360009081526014602052604090205460ff16600381111561100657611006611e64565b14155b15611027576040516360237f6b60e11b815260040160405180910390fd5b6001600160a01b03811661104e5760405163330ef51f60e01b815260040160405180910390fd5b6001600160a01b03811660009081526015602052604090205460ff16156110885760405163916e73bd60e01b815260040160405180910390fd5b6001600160a01b038116600081815260156020908152604091829020805460ff1916600117905590513381527fbc68405e644da2aaf25623ce2199da82c6dfd2e1de102b400eba6a091704d4f4910160405180910390a250565b6016546001190161110657604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561113657604051633ee5b89360e01b815260040160405180910390fd5b610930828483336115f4565b6016546001190161116657604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561119657604051633ee5b89360e01b815260040160405180910390fd5b6001600160a01b038082166000908152601560205260408120546201000090049091169081156111c657816111c8565b825b9050336001600160a01b038216146111f35760405163f3dc2d1960e01b815260040160405180910390fd5b6111ff858786866115f4565b5050600160165550505050565b6001600160a01b0380831660009081526015602052604090205483916201000090910416331461124f5760405163407c584960e01b815260040160405180910390fd5b6001600160a01b0380841660009081526015602052604090206001015461127a918591859116611539565b505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b816001600160a01b0316816001600160a01b0316036112df576040516309a3ec2160e11b815260040160405180910390fd5b6001600160a01b03838116600081815260156020526040808220805462010000600160b01b031916620100008887169081029190911790915590519093851692917fd73892e8827a6025d74a01fca72a8e0d9e2c04080272e728f8861410c7d3c2d191a4505050565b6001600160a01b03811661136f576040516339773cbf60e21b815260040160405180910390fd5b8260000361139057604051632a24141960e01b815260040160405180910390fd5b6001600160a01b0382166000908152600660209081526040918290208251808401909352805463ffffffff16808452600190910154918301919091521580156113db57506020810151155b156113fb5760045463ffffffff1681526001600160a01b03831660208201525b600061140f826020015183600001516117a3565b600081815260076020526040902060020154909150600160a01b900460ff1661144b5760405163a13f958f60e01b815260040160405180910390fd5b6114536115cd565b15801561147957506001600160a01b03831660009081526015602052604090205460ff16155b1561149757604051631464c65f60e31b815260040160405180910390fd5b6114a184866117e5565b6001600160a01b038084166000908152600a60209081526040808320938816835292905290812080548792906114d8908490611edc565b9091555050604080516001600160a01b03868116825260208201849052918101879052336060820152908416907fcc3100122c1752fe0f6bfa5503175bc53eb00b5f2d774e81efedcd2b10a6d24b9060800160405180910390a25050505050565b816001600160a01b0316816001600160a01b03160361156b57604051631b0043f560e31b815260040160405180910390fd5b6001600160a01b0383811660008181526015602052604080822060010180546001600160a01b03191687861690811790915590519093851692917f31f32ebf07b0ac7fe173f7b7f3f943020d9bdc6dbfbdcdae01bd45ea78d953d791a4505050565b6000806115d861127f565b6001600160a01b031614806115ef575060125460ff165b905090565b6001600160a01b0381811660009081526015602052604090206001015416801561161e5780611620565b825b90506001600160a01b0381166116495760405163516101e760e11b815260040160405180910390fd5b8460000361166a5760405163606ab7a160e11b815260040160405180910390fd5b6004548451602086015163ffffffff8281169316929092149160009161169091906117a3565b90506000826116b6576000828152600760205260409020546001600160a01b03166116bc565b60208701515b6001600160a01b038087166000908152600a60209081526040808320938516835292905220549091508881101561170657604051630a1e6d4d60e01b815260040160405180910390fd5b6001600160a01b038087166000908152600a60209081526040808320938616835292905220898203905561173b82868b611936565b604080516001600160a01b0387811682528481166020830152918101859052606081018b9052336080820152908716907ffacf3161e9675ca1ca84a16d238bc838c7e2084c302cf411d9da7ac0391f64869060a00160405180910390a2505050505050505050565b600082826040516020016117c792919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b806000036117f1575050565b6001600160a01b03821661181857604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118859190611eef565b905061189c6001600160a01b038316333086611975565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190611eef565b6119129190611e90565b1461193057604051630e40773560e21b815260040160405180910390fd5b50505050565b8060000361194357505050565b6001600160a01b03831661196a57604051633a48ca7b60e11b815260040160405180910390fd5b61127a8383836119e0565b6040516001600160a01b03808516602483015283166044820152606481018290526119309085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611a10565b6040516001600160a01b03831660248201526044810182905261127a90849063a9059cbb60e01b906064016119a9565b6000611a65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611ae79092919063ffffffff16565b80519091501561127a5780806020019051810190611a839190611f08565b61127a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084015b60405180910390fd5b6060611af68484600085611afe565b949350505050565b606082471015611b5f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611ade565b600080866001600160a01b03168587604051611b7b9190611f4e565b60006040518083038185875af1925050503d8060008114611bb8576040519150601f19603f3d011682016040523d82523d6000602084013e611bbd565b606091505b5091509150611bce87838387611bd9565b979650505050505050565b60608315611c48578251600003611c41576001600160a01b0385163b611c415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611ade565b5081611af6565b611af68383815115611c5d5781518083602001fd5b8060405162461bcd60e51b8152600401611ade9190611f6a565b6001600160a01b0381168114611c8c57600080fd5b50565b600060208284031215611ca157600080fd5b8135611cac81611c77565b9392505050565b60008060408385031215611cc657600080fd5b8235611cd181611c77565b91506020830135611ce181611c77565b809150509250929050565b600080600060608486031215611d0157600080fd5b833592506020840135611d1381611c77565b91506040840135611d2381611c77565b809150509250925092565b60008060408385031215611d4157600080fd5b823591506020830135611ce181611c77565b600060208284031215611d6557600080fd5b5035919050565b600060408284031215611d7e57600080fd5b6040516040810181811067ffffffffffffffff82111715611daf57634e487b7160e01b600052604160045260246000fd5b604052905080823563ffffffff81168114611dc957600080fd5b8152602092830135920191909152919050565b600080600060808486031215611df157600080fd5b611dfb8585611d6c565b9250604084013591506060840135611d2381611c77565b60008060008060a08587031215611e2857600080fd5b611e328686611d6c565b9350604085013592506060850135611e4981611c77565b91506080850135611e5981611c77565b939692955090935050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561096157610961611e7a565b808202811582820484141761096157610961611e7a565b600082611ed757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561096157610961611e7a565b600060208284031215611f0157600080fd5b5051919050565b600060208284031215611f1a57600080fd5b81518015158114611cac57600080fd5b60005b83811015611f45578181015183820152602001611f2d565b50506000910152565b60008251611f60818460208701611f2a565b9190910192915050565b6020815260008251806020840152611f89816040850160208701611f2a565b601f01601f1916919091016040019291505056fea264697066735822122051d4f43b3d24795f25abf69caac7759074b3ccf593cc985fcd669578b08a72f964736f6c63430008110033", + "devdoc": { + "events": { + "LiquidityFeeNumeratorUpdated(uint256,address)": { + "params": { + "caller": "- The account that called the function", + "liquidityFeeNumerator": "- The LIQUIDITY_FEE_NUMERATOR new value" + } + }, + "MaxRoutersPerTransferUpdated(uint256,address)": { + "params": { + "caller": "- The account that called the function", + "maxRoutersPerTransfer": "- The maxRoutersPerTransfer new value" + } + }, + "RouterAdded(address,address)": { + "params": { + "caller": "- The account that called the function", + "router": "- The address of the added router" + } + }, + "RouterApprovedForPortal(address,address)": { + "params": { + "caller": "- The account that called the function", + "router": "- The address of the approved router" + } + }, + "RouterInitialized(address)": { + "details": "This does not confer permissions onto the router, only the configuration", + "params": { + "router": "The router initialized" + } + }, + "RouterLiquidityAdded(address,address,bytes32,uint256,address)": { + "params": { + "amount": "- The amount of liquidity added", + "caller": "- The account that called the function", + "key": "- The hash of the canonical id and domain", + "local": "- The address of the token added (all liquidity held in local asset)", + "router": "- The address of the router the funds were credited to" + } + }, + "RouterLiquidityRemoved(address,address,address,bytes32,uint256,address)": { + "params": { + "amount": "- The amount of liquidity withdrawn", + "caller": "- The account that called the function", + "local": "- The address of the token withdrawn", + "router": "- The router you are removing liquidity from", + "to": "- The address the funds were withdrawn to" + } + }, + "RouterOwnerAccepted(address,address,address)": { + "params": { + "newOwner": "- The address of the new owner of the router", + "prevOwner": "- The address of the previous owner of the router", + "router": "- The address of the added router" + } + }, + "RouterOwnerProposed(address,address,address)": { + "params": { + "newProposed": "- The address of the new proposed", + "prevProposed": "- The address of the previous proposed", + "router": "- The address of the added router" + } + }, + "RouterRecipientSet(address,address,address)": { + "params": { + "newRecipient": "- The address of the new recipient of the router", + "prevRecipient": "- The address of the previous recipient of the router", + "router": "- The address of the added router" + } + }, + "RouterRemoved(address,address)": { + "params": { + "caller": "- The account that called the function", + "router": "- The address of the removed router" + } + }, + "RouterUnapprovedForPortal(address,address)": { + "params": { + "caller": "- The account that called the function", + "router": "- The address of the disapproved router" + } + } + }, + "kind": "dev", + "methods": { + "acceptProposedRouterOwner(address)": { + "params": { + "_router": "Router address to set recipient" + } + }, + "addRouterLiquidity(uint256,address)": { + "details": "The liquidity will be held in the local asset, which is the representation if you are *not* on the canonical domain, and the canonical asset otherwise.", + "params": { + "_amount": "- The amount of liquidity to add for the router", + "_local": "- The address of the asset you're adding liquidity for. If adding liquidity of the native asset, routers may use `address(0)` or the wrapped asset" + } + }, + "addRouterLiquidityFor(uint256,address,address)": { + "details": "The liquidity will be held in the local asset, which is the representation if you are *not* on the canonical domain, and the canonical asset otherwise.", + "params": { + "_amount": "- The amount of liquidity to add for the router", + "_local": "- The address of the asset you're adding liquidity for. If adding liquidity of the native asset, routers may use `address(0)` or the wrapped asset", + "_router": "The router you are adding liquidity on behalf of" + } + }, + "approveRouter(address)": { + "params": { + "_router": "Router address to setup" + } + }, + "approveRouterForPortal(address)": { + "params": { + "_router": "- The router address to approve" + } + }, + "getProposedRouterOwner(address)": { + "details": "All routers must wait for the delay timeout before accepting a new owner", + "params": { + "_router": "The relevant router address" + } + }, + "getProposedRouterOwnerTimestamp(address)": { + "details": "All routers must wait for the delay timeout before accepting a new owner", + "params": { + "_router": "The relevant router address" + } + }, + "getRouterApproval(address)": { + "params": { + "_router": "The relevant router address" + } + }, + "getRouterApprovalForPortal(address)": { + "params": { + "_router": "The relevant router address" + } + }, + "getRouterOwner(address)": { + "params": { + "_router": "The relevant router address" + } + }, + "getRouterRecipient(address)": { + "details": "The recipient (if set) receives all funds when router liquidity is removed", + "params": { + "_router": "The relevant router address" + } + }, + "initializeRouter(address,address)": { + "details": "Does not set allowlisting permissions, only owner and recipient", + "params": { + "_owner": "The owner (can change recipient, proposes new owners)", + "_recipient": "Where liquidity will be withdrawn to" + } + }, + "proposeRouterOwner(address,address)": { + "details": "If routers burn their ownership, they can no longer update the recipient", + "params": { + "_proposed": "Proposed owner Address to set to router", + "_router": "Router address to set recipient" + } + }, + "removeRouterLiquidity((uint32,bytes32),uint256,address)": { + "details": "Using the `_canonical` information in the interface instead of the local asset to allow routers to remove liquidity even if the asset is delisted", + "params": { + "_amount": "- The amount of liquidity to remove for the router", + "_canonical": "The canonical token information in plaintext", + "_to": "The address that will receive the liquidity being removed if no router recipient exists." + } + }, + "removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)": { + "details": "Using the `_canonical` information in the interface instead of the local asset to allow routers to remove liquidity even if the asset is delisted", + "params": { + "_amount": "- The amount of liquidity to remove for the router native asset, routers may use `address(0)` or the wrapped asset", + "_canonical": "The canonical token information in plaintext", + "_router": "The address of the router", + "_to": "The address that will receive the liquidity being removed" + } + }, + "setLiquidityFeeNumerator(uint256)": { + "details": "Admin can set LIQUIDITY_FEE_NUMERATOR variable, Liquidity fee should be less than 5%", + "params": { + "_numerator": "new LIQUIDITY_FEE_NUMERATOR" + } + }, + "setMaxRoutersPerTransfer(uint256)": { + "params": { + "_newMaxRouters": "The new max amount of routers" + } + }, + "setRouterRecipient(address,address)": { + "details": "Router should only be able to set this once otherwise if router key compromised, no problem is solved since attacker could just update recipient", + "params": { + "_recipient": "Recipient Address to set to router", + "_router": "Router address to set recipient" + } + }, + "unapproveRouter(address)": { + "params": { + "_router": "Router address to remove" + } + }, + "unapproveRouterForPortal(address)": { + "params": { + "_router": "- The router address to remove approval" + } + } + }, + "version": 1 + }, + "userdoc": { + "events": { + "LiquidityFeeNumeratorUpdated(uint256,address)": { + "notice": "Emitted when the LIQUIDITY_FEE_NUMERATOR variable is updated" + }, + "MaxRoutersPerTransferUpdated(uint256,address)": { + "notice": "Emitted when the maxRoutersPerTransfer variable is updated" + }, + "RouterAdded(address,address)": { + "notice": "Emitted when a new router is added" + }, + "RouterApprovedForPortal(address,address)": { + "notice": "Emitted when a router is approved for Portal" + }, + "RouterInitialized(address)": { + "notice": "Emitted when a router adds a config via `addRouterConfig`" + }, + "RouterLiquidityAdded(address,address,bytes32,uint256,address)": { + "notice": "Emitted when a router adds liquidity to the contract" + }, + "RouterLiquidityRemoved(address,address,address,bytes32,uint256,address)": { + "notice": "Emitted when a router withdraws liquidity from the contract" + }, + "RouterOwnerAccepted(address,address,address)": { + "notice": "Emitted when the owner of router is accepted" + }, + "RouterOwnerProposed(address,address,address)": { + "notice": "Emitted when the owner of router is proposed" + }, + "RouterRecipientSet(address,address,address)": { + "notice": "Emitted when the recipient of router is updated" + }, + "RouterRemoved(address,address)": { + "notice": "Emitted when an existing router is removed" + }, + "RouterUnapprovedForPortal(address,address)": { + "notice": "Emitted when a router is disapproved for Portal" + } + }, + "kind": "user", + "methods": { + "acceptProposedRouterOwner(address)": { + "notice": "New router owner must accept role, or previous if proposed is 0x0" + }, + "addRouterLiquidity(uint256,address)": { + "notice": "This is used by any router to increase their available liquidity for a given asset." + }, + "addRouterLiquidityFor(uint256,address,address)": { + "notice": "This is used by anyone to increase a router's available liquidity for a given asset." + }, + "approveRouter(address)": { + "notice": "Used to allowlist a given router" + }, + "approveRouterForPortal(address)": { + "notice": "Allow router to use Portals" + }, + "getProposedRouterOwner(address)": { + "notice": "Returns the currently proposed router owner" + }, + "getProposedRouterOwnerTimestamp(address)": { + "notice": "Returns the currently proposed router owner timestamp" + }, + "getRouterApproval(address)": { + "notice": "Returns the approved router for the given router address" + }, + "getRouterApprovalForPortal(address)": { + "notice": "Returns whether the router is approved for portals or not" + }, + "getRouterOwner(address)": { + "notice": "Returns the router owner if it is set, or the router itself if not" + }, + "getRouterRecipient(address)": { + "notice": "Returns the recipient for the specified router" + }, + "initializeRouter(address,address)": { + "notice": "Can be called by anyone to set a config for their router (the msg.sender)" + }, + "proposeRouterOwner(address,address)": { + "notice": "Current owner or router may propose a new router owner" + }, + "removeRouterLiquidity((uint32,bytes32),uint256,address)": { + "notice": "This is used by any router to decrease their available liquidity for a given asset." + }, + "removeRouterLiquidityFor((uint32,bytes32),uint256,address,address)": { + "notice": "This is used by any router owner to decrease their available liquidity for a given asset." + }, + "setLiquidityFeeNumerator(uint256)": { + "notice": "Sets the LIQUIDITY_FEE_NUMERATOR" + }, + "setMaxRoutersPerTransfer(uint256)": { + "notice": "Used to set the max amount of routers a payment can be routed through" + }, + "setRouterRecipient(address,address)": { + "notice": "Sets the designated recipient for a router" + }, + "unapproveRouter(address)": { + "notice": "Used to remove routers that can transact crosschain" + }, + "unapproveRouterForPortal(address)": { + "notice": "Remove router access to use Portals" + } + }, + "notice": "This contract is designed to manage router access, meaning it maintains the router recipients, owners, and the router allowlist itself. As a router, there are three important permissions: `router` - this is the address that will sign bids sent to the sequencer `routerRecipient` - this is the address that receives funds when liquidity is withdrawn `routerOwner` - this is the address permitted to update recipients and propose new owners In cases where the owner is not set, the caller should be the `router` itself. In cases where the `routerRecipient` is not set, the funds can be removed to anywhere. When setting a new `routerOwner`, the current owner (or router) must create a proposal, which can be accepted by the proposed owner after the delay period. If the proposed owner is the empty address, then it must be accepted by the current owner.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/RoutersFacet.sol:RoutersFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/StableSwapFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/StableSwapFacetStaging.json new file mode 100644 index 0000000000..ff422a5098 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/StableSwapFacetStaging.json @@ -0,0 +1,2010 @@ +{ + "address": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapTokenIndex_notExist", + "type": "error" + }, + { + "inputs": [], + "name": "StableSwapFacet__getSwapToken_outOfRange", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "AddLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "NewAdminFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "NewSwapFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidity", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "tokenAmounts", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "fees", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "invariant", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + } + ], + "name": "RemoveLiquidityImbalance", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpTokenSupply", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "boughtId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + } + ], + "name": "RemoveLiquidityOne", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "buyer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensSold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokensBought", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "soldId", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "boughtId", + "type": "uint128" + } + ], + "name": "TokenSwap", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "minToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "addSwapLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "calculateRemoveSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + } + ], + "name": "calculateRemoveSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "availableTokenAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + } + ], + "name": "calculateSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "deposit", + "type": "bool" + } + ], + "name": "calculateSwapTokenAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapA", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapAPrecise", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getSwapAdminBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapLPToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapStorage", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "internalType": "struct SwapUtils.Swap", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "index", + "type": "uint8" + } + ], + "name": "getSwapTokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "tokenAddress", + "type": "address" + } + ], + "name": "getSwapTokenIndex", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "getSwapVirtualPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidity", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "maxBurnAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityImbalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "tokenIndex", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "minAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "removeSwapLiquidityOneToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "tokenIndexFrom", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "tokenIndexTo", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dx", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minDy", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExact", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + }, + { + "internalType": "address", + "name": "assetIn", + "type": "address" + }, + { + "internalType": "address", + "name": "assetOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "swapExactOut", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x3fce737f4fb181f98f5c3194aeb4939ed49a68166509aa01a6a72e16ec251b55", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "4382498", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xfce0a7ff0dfd5fe71e95b874099eac7c2c5f1282db3cd07a36171ce67e5a25e1", + "transactionHash": "0x3fce737f4fb181f98f5c3194aeb4939ed49a68166509aa01a6a72e16ec251b55", + "logs": [], + "blockNumber": 2894817, + "cumulativeGasUsed": "4433060", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_feeOnTransferNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleIncomingAsset_nativeAssetNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StableSwapFacet__deadlineCheck_deadlineNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StableSwapFacet__getSwapTokenBalance_indexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StableSwapFacet__getSwapTokenIndex_notExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StableSwapFacet__getSwapToken_outOfRange\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"NewAdminFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"NewSwapFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"tokenAmounts\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityImbalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpTokenSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"boughtId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidityOne\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensSold\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokensBought\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"soldId\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"boughtId\",\"type\":\"uint128\"}],\"name\":\"TokenSwap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"addSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"calculateRemoveSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"}],\"name\":\"calculateRemoveSwapLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"availableTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"}],\"name\":\"calculateSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"deposit\",\"type\":\"bool\"}],\"name\":\"calculateSwapTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapA\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapAPrecise\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getSwapAdminBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapLPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapStorage\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"initialA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"contract LPToken\",\"name\":\"lpToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenPrecisionMultipliers\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"adminFees\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"removeTime\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapUtils.Swap\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getSwapToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"getSwapTokenBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"getSwapTokenIndex\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"getSwapVirtualPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBurnAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidityImbalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndex\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"minAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"removeSwapLiquidityOneToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexFrom\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"tokenIndexTo\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"dx\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minDy\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExact\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"assetIn\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"assetOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"swapExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Most of the logic is stored as a library `SwapUtils` for the sake of contract readability.\",\"kind\":\"dev\",\"methods\":{\"addSwapLiquidity(bytes32,uint256[],uint256,uint256)\":{\"params\":{\"amounts\":\"the amounts of each token to add, in their native precision\",\"deadline\":\"latest timestamp to accept this transaction\",\"key\":\"Hash of the canonical id + domain\",\"minToMint\":\"the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation\"},\"returns\":{\"_0\":\"amount of LP token user minted and received\"}},\"calculateRemoveSwapLiquidity(bytes32,uint256)\":{\"params\":{\"amount\":\"the amount of LP tokens that would be burned on withdrawal\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"array of token balances that the user will receive\"}},\"calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\",\"tokenAmount\":\"the amount of LP token to burn\",\"tokenIndex\":\"index of which token will be withdrawn\"},\"returns\":{\"availableTokenAmount\":\"calculated amount of underlying token available to withdraw\"}},\"calculateSwap(bytes32,uint8,uint8,uint256)\":{\"params\":{\"dx\":\"the amount of tokens the user wants to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.\",\"key\":\"Hash of the canonical id + domain\",\"tokenIndexFrom\":\"the token the user wants to sell\",\"tokenIndexTo\":\"the token the user wants to buy\"},\"returns\":{\"_0\":\"amount of tokens the user will receive\"}},\"calculateSwapTokenAmount(bytes32,uint256[],bool)\":{\"details\":\"This shouldn't be used outside frontends for user estimates.\",\"params\":{\"amounts\":\"an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.\",\"deposit\":\"whether this is a deposit or a withdrawal\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"token amount the user will receive\"}},\"getSwapA(bytes32)\":{\"details\":\"See the StableSwap paper for details\",\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"A parameter\"}},\"getSwapAPrecise(bytes32)\":{\"details\":\"See the StableSwap paper for details\",\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"A parameter in its raw precision form\"}},\"getSwapAdminBalance(bytes32,uint256)\":{\"params\":{\"index\":\"Index of the pooled token\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"admin's token balance in the token's precision\"}},\"getSwapLPToken(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"LPToken\"}},\"getSwapStorage(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"SwapUtils.Swap\"}},\"getSwapToken(bytes32,uint8)\":{\"params\":{\"index\":\"the index of the token\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"address of the token at given index\"}},\"getSwapTokenBalance(bytes32,uint8)\":{\"params\":{\"index\":\"the index of the token\",\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"current balance of the pooled token at given index with token's native precision\"}},\"getSwapTokenIndex(bytes32,address)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\",\"tokenAddress\":\"address of the token\"},\"returns\":{\"_0\":\"the index of the given token address\"}},\"getSwapVirtualPrice(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"the virtual price, scaled to the POOL_PRECISION_DECIMALS\"}},\"removeSwapLiquidity(bytes32,uint256,uint256[],uint256)\":{\"details\":\"Liquidity can always be removed, even when the pool is paused.\",\"params\":{\"amount\":\"the amount of LP tokens to burn\",\"deadline\":\"latest timestamp to accept this transaction\",\"key\":\"Hash of the canonical id + domain\",\"minAmounts\":\"the minimum amounts of each token in the pool acceptable for this burn. Useful as a front-running mitigation\"},\"returns\":{\"_0\":\"amounts of tokens user received\"}},\"removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)\":{\"params\":{\"amounts\":\"how much of each token to withdraw\",\"deadline\":\"latest timestamp to accept this transaction\",\"key\":\"Hash of the canonical id + domain\",\"maxBurnAmount\":\"the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation.\"},\"returns\":{\"_0\":\"amount of LP tokens burned\"}},\"removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)\":{\"params\":{\"deadline\":\"latest timestamp to accept this transaction\",\"key\":\"Hash of the canonical id + domain\",\"minAmount\":\"the minimum amount to withdraw, otherwise revert\",\"tokenAmount\":\"the amount of the token you want to receive\",\"tokenIndex\":\"the index of the token you want to receive\"},\"returns\":{\"_0\":\"amount of chosen token user received\"}},\"swap(bytes32,uint8,uint8,uint256,uint256,uint256)\":{\"params\":{\"deadline\":\"latest timestamp to accept this transaction\",\"dx\":\"the amount of tokens the user wants to swap from\",\"key\":\"Hash of the canonical id + domain\",\"minDy\":\"the min amount the user would like to receive, or revert.\",\"tokenIndexFrom\":\"the token the user wants to swap from\",\"tokenIndexTo\":\"the token the user wants to swap to\"}},\"swapExact(bytes32,uint256,address,address,uint256,uint256)\":{\"params\":{\"amountIn\":\"the amount of tokens the user wants to swap from\",\"assetIn\":\"the token the user wants to swap from\",\"assetOut\":\"the token the user wants to swap to\",\"key\":\"Hash of the canonical id + domain\"}},\"swapExactOut(bytes32,uint256,address,address,uint256,uint256)\":{\"params\":{\"amountOut\":\"the amount of tokens the user wants to swap to\",\"assetIn\":\"the token the user wants to swap from\",\"assetOut\":\"the token the user wants to swap to\",\"key\":\"Hash of the canonical id + domain\"}}},\"title\":\"Swap - A StableSwap implementation in solidity.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addSwapLiquidity(bytes32,uint256[],uint256,uint256)\":{\"notice\":\"Add liquidity to the pool with the given amounts of tokens\"},\"calculateRemoveSwapLiquidity(bytes32,uint256)\":{\"notice\":\"A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens\"},\"calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)\":{\"notice\":\"Calculate the amount of underlying token available to withdraw when withdrawing via only single token\"},\"calculateSwap(bytes32,uint8,uint8,uint256)\":{\"notice\":\"Calculate amount of tokens you receive on swap\"},\"calculateSwapTokenAmount(bytes32,uint256[],bool)\":{\"notice\":\"A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various \\\"min\\\" parameters on calls to fight front-running\"},\"getSwapA(bytes32)\":{\"notice\":\"Return A, the amplification coefficient * n ** (n - 1)\"},\"getSwapAPrecise(bytes32)\":{\"notice\":\"Return A in its raw precision form\"},\"getSwapAdminBalance(bytes32,uint256)\":{\"notice\":\"This function reads the accumulated amount of admin fees of the token with given index\"},\"getSwapLPToken(bytes32)\":{\"notice\":\"Return LP token for canonical Id\"},\"getSwapStorage(bytes32)\":{\"notice\":\"Return Stable swap storage\"},\"getSwapToken(bytes32,uint8)\":{\"notice\":\"Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\"},\"getSwapTokenBalance(bytes32,uint8)\":{\"notice\":\"Return current balance of the pooled token at given index\"},\"getSwapTokenIndex(bytes32,address)\":{\"notice\":\"Return the index of the given token address. Reverts if no matching token is found.\"},\"getSwapVirtualPrice(bytes32)\":{\"notice\":\"Get the virtual price, to help calculate profit\"},\"removeSwapLiquidity(bytes32,uint256,uint256[],uint256)\":{\"notice\":\"Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)\":{\"notice\":\"Remove liquidity from the pool, weighted differently than the pool's current balances. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)\":{\"notice\":\"Remove liquidity from the pool all in one token. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply.\"},\"swap(bytes32,uint8,uint8,uint256,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"},\"swapExact(bytes32,uint256,address,address,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"},\"swapExactOut(bytes32,uint256,address,address,uint256,uint256)\":{\"notice\":\"Swap two tokens using this pool\"}},\"notice\":\"This contract is responsible for custody of closely pegged assets (eg. group of stablecoins) and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens in desired ratios for an exchange of the pool token that represents their share of the pool. Users can burn pool tokens and withdraw their share of token(s). Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets distributed to the LPs. In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which stops the ratio of the tokens in the pool from changing. Users can always withdraw their tokens via multi-asset withdraws.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/StableSwapFacet.sol\":\"StableSwapFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/StableSwapFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {AmplificationUtils, SwapUtils} from \\\"../libraries/AmplificationUtils.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\n/**\\n * @title Swap - A StableSwap implementation in solidity.\\n * @notice This contract is responsible for custody of closely pegged assets (eg. group of stablecoins)\\n * and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens\\n * in desired ratios for an exchange of the pool token that represents their share of the pool.\\n * Users can burn pool tokens and withdraw their share of token(s).\\n *\\n * Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets\\n * distributed to the LPs.\\n *\\n * In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which\\n * stops the ratio of the tokens in the pool from changing.\\n *\\n * Users can always withdraw their tokens via multi-asset withdraws.\\n *\\n * @dev Most of the logic is stored as a library `SwapUtils` for the sake of contract readability.\\n */\\ncontract StableSwapFacet is BaseConnextFacet {\\n using SwapUtils for SwapUtils.Swap;\\n using AmplificationUtils for SwapUtils.Swap;\\n\\n // ========== Custom Errors ===========\\n error StableSwapFacet__deadlineCheck_deadlineNotMet();\\n error StableSwapFacet__getSwapToken_outOfRange();\\n error StableSwapFacet__getSwapTokenIndex_notExist();\\n error StableSwapFacet__getSwapTokenBalance_indexOutOfRange();\\n\\n // ============ Properties ============\\n\\n // ============ Events ============\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @notice Modifier to check deadline against current timestamp\\n * @param deadline latest timestamp to accept this transaction\\n */\\n modifier deadlineCheck(uint256 deadline) {\\n if (block.timestamp > deadline) revert StableSwapFacet__deadlineCheck_deadlineNotMet();\\n _;\\n }\\n\\n // ============ View Functions ============\\n /**\\n * @notice Return Stable swap storage\\n * @param key Hash of the canonical id + domain\\n * @return SwapUtils.Swap\\n */\\n function getSwapStorage(bytes32 key) external view returns (SwapUtils.Swap memory) {\\n return s.swapStorages[key];\\n }\\n\\n /**\\n * @notice Return LP token for canonical Id\\n * @param key Hash of the canonical id + domain\\n * @return LPToken\\n */\\n function getSwapLPToken(bytes32 key) external view returns (address) {\\n return address(s.swapStorages[key].lpToken);\\n }\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param key Hash of the canonical id + domain\\n * @return A parameter\\n */\\n function getSwapA(bytes32 key) external view returns (uint256) {\\n return s.swapStorages[key].getA();\\n }\\n\\n /**\\n * @notice Return A in its raw precision form\\n * @dev See the StableSwap paper for details\\n * @param key Hash of the canonical id + domain\\n * @return A parameter in its raw precision form\\n */\\n function getSwapAPrecise(bytes32 key) external view returns (uint256) {\\n return s.swapStorages[key].getAPrecise();\\n }\\n\\n /**\\n * @notice Return address of the pooled token at given index. Reverts if tokenIndex is out of range.\\n * @param key Hash of the canonical id + domain\\n * @param index the index of the token\\n * @return address of the token at given index\\n */\\n function getSwapToken(bytes32 key, uint8 index) public view returns (IERC20) {\\n if (index >= s.swapStorages[key].pooledTokens.length) revert StableSwapFacet__getSwapToken_outOfRange();\\n return s.swapStorages[key].pooledTokens[index];\\n }\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key Hash of the canonical id + domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getSwapTokenIndex(bytes32 key, address tokenAddress) public view returns (uint8) {\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(getSwapToken(key, index)) != tokenAddress) revert StableSwapFacet__getSwapTokenIndex_notExist();\\n return index;\\n }\\n\\n /**\\n * @notice Return current balance of the pooled token at given index\\n * @param key Hash of the canonical id + domain\\n * @param index the index of the token\\n * @return current balance of the pooled token at given index with token's native precision\\n */\\n function getSwapTokenBalance(bytes32 key, uint8 index) external view returns (uint256) {\\n if (index >= s.swapStorages[key].balances.length) revert StableSwapFacet__getSwapTokenBalance_indexOutOfRange();\\n return s.swapStorages[key].balances[index];\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param key Hash of the canonical id + domain\\n * @return the virtual price, scaled to the POOL_PRECISION_DECIMALS\\n */\\n function getSwapVirtualPrice(bytes32 key) external view returns (uint256) {\\n return s.swapStorages[key].getVirtualPrice();\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on swap\\n * @param key Hash of the canonical id + domain\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell. If the token charges\\n * a fee on transfers, use the amount that gets transferred after the fee.\\n * @return amount of tokens the user will receive\\n */\\n function calculateSwap(\\n bytes32 key,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256) {\\n return s.swapStorages[key].calculateSwap(tokenIndexFrom, tokenIndexTo, dx);\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param key Hash of the canonical id + domain\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return token amount the user will receive\\n */\\n function calculateSwapTokenAmount(\\n bytes32 key,\\n uint256[] calldata amounts,\\n bool deposit\\n ) external view returns (uint256) {\\n return s.swapStorages[key].calculateTokenAmount(amounts, deposit);\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of LP tokens\\n * @param key Hash of the canonical id + domain\\n * @param amount the amount of LP tokens that would be burned on withdrawal\\n * @return array of token balances that the user will receive\\n */\\n function calculateRemoveSwapLiquidity(bytes32 key, uint256 amount) external view returns (uint256[] memory) {\\n return s.swapStorages[key].calculateRemoveLiquidity(amount);\\n }\\n\\n /**\\n * @notice Calculate the amount of underlying token available to withdraw\\n * when withdrawing via only single token\\n * @param key Hash of the canonical id + domain\\n * @param tokenAmount the amount of LP token to burn\\n * @param tokenIndex index of which token will be withdrawn\\n * @return availableTokenAmount calculated amount of underlying token\\n * available to withdraw\\n */\\n function calculateRemoveSwapLiquidityOneToken(\\n bytes32 key,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) external view returns (uint256 availableTokenAmount) {\\n return s.swapStorages[key].calculateWithdrawOneToken(tokenAmount, tokenIndex);\\n }\\n\\n /**\\n * @notice This function reads the accumulated amount of admin fees of the token with given index\\n * @param key Hash of the canonical id + domain\\n * @param index Index of the pooled token\\n * @return admin's token balance in the token's precision\\n */\\n function getSwapAdminBalance(bytes32 key, uint256 index) external view returns (uint256) {\\n return s.swapStorages[key].getAdminBalance(index);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice Swap two tokens using this pool\\n * @param key Hash of the canonical id + domain\\n * @param tokenIndexFrom the token the user wants to swap from\\n * @param tokenIndexTo the token the user wants to swap to\\n * @param dx the amount of tokens the user wants to swap from\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @param deadline latest timestamp to accept this transaction\\n */\\n function swap(\\n bytes32 key,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n return s.swapStorages[key].swap(tokenIndexFrom, tokenIndexTo, dx, minDy);\\n }\\n\\n /**\\n * @notice Swap two tokens using this pool\\n * @param key Hash of the canonical id + domain\\n * @param assetIn the token the user wants to swap from\\n * @param assetOut the token the user wants to swap to\\n * @param amountIn the amount of tokens the user wants to swap from\\n */\\n function swapExact(\\n bytes32 key,\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n return\\n s.swapStorages[key].swap(\\n getSwapTokenIndex(key, assetIn),\\n getSwapTokenIndex(key, assetOut),\\n amountIn,\\n minAmountOut\\n );\\n }\\n\\n /**\\n * @notice Swap two tokens using this pool\\n * @param key Hash of the canonical id + domain\\n * @param assetIn the token the user wants to swap from\\n * @param assetOut the token the user wants to swap to\\n * @param amountOut the amount of tokens the user wants to swap to\\n */\\n function swapExactOut(\\n bytes32 key,\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n return\\n s.swapStorages[key].swapOut(\\n getSwapTokenIndex(key, assetIn),\\n getSwapTokenIndex(key, assetOut),\\n amountOut,\\n maxAmountIn\\n );\\n }\\n\\n /**\\n * @notice Add liquidity to the pool with the given amounts of tokens\\n * @param key Hash of the canonical id + domain\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * @param deadline latest timestamp to accept this transaction\\n * @return amount of LP token user minted and received\\n */\\n function addSwapLiquidity(\\n bytes32 key,\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n return s.swapStorages[key].addLiquidity(amounts, minToMint);\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly\\n * over period of 4 weeks since last deposit will apply.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param key Hash of the canonical id + domain\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @param deadline latest timestamp to accept this transaction\\n * @return amounts of tokens user received\\n */\\n function removeSwapLiquidity(\\n bytes32 key,\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256[] memory) {\\n return s.swapStorages[key].removeLiquidity(amount, minAmounts);\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token. Withdraw fee that decays linearly\\n * over period of 4 weeks since last deposit will apply.\\n * @param key Hash of the canonical id + domain\\n * @param tokenAmount the amount of the token you want to receive\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @param deadline latest timestamp to accept this transaction\\n * @return amount of chosen token user received\\n */\\n function removeSwapLiquidityOneToken(\\n bytes32 key,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n return s.swapStorages[key].removeLiquidityOneToken(tokenAmount, tokenIndex, minAmount);\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances. Withdraw fee that decays linearly\\n * over period of 4 weeks since last deposit will apply.\\n * @param key Hash of the canonical id + domain\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @param deadline latest timestamp to accept this transaction\\n * @return amount of LP tokens burned\\n */\\n function removeSwapLiquidityImbalance(\\n bytes32 key,\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external nonReentrant deadlineCheck(deadline) whenNotPaused returns (uint256) {\\n return s.swapStorages[key].removeLiquidityImbalance(amounts, maxBurnAmount);\\n }\\n}\\n\",\"keccak256\":\"0xa8a638d05a9acb209662dbd4fbe867fc374a42bd3adfe5c035cecaaa303e6276\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50614e22806100206000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638d365457116100ad578063b6618dff11610071578063b6618dff146102be578063bb0577eb146102d1578063d251dc35146102e4578063f495e807146102f7578063ff126de91461030a57600080fd5b80638d3654571461024d5780638f11d27f14610260578063a02288f414610273578063ad94911b14610286578063b3a4eab4146102ab57600080fd5b806374c6b89b116100f457806374c6b89b146101bd5780637652f59d146101d057806376ca2e52146101e357806380b297e8146101f65780638b480b121461020957600080fd5b80631301caa214610131578063241ca57a1461015757806329d99b101461016a5780632d91a5151461017d5780634bbcba8e1461019d575b600080fd5b61014461013f3660046145ab565b61031d565b6040519081526020015b60405180910390f35b610144610165366004614619565b61033e565b61014461017836600461468d565b610411565b61019061018b3660046146c2565b610432565b60405161014e919061474f565b6101b06101ab36600461485e565b6106a9565b60405161014e91906148b9565b6101446101cb3660046148e3565b61073c565b6101446101de3660046146c2565b6107f4565b6101446101f136600461494c565b61080b565b6101446102043660046148e3565b61082e565b6102356102173660046146c2565b6000908152601860205260409020600701546001600160a01b031690565b6040516001600160a01b03909116815260200161014e565b61014461025b366004614619565b6108d5565b61014461026e3660046149ab565b610998565b6101b06102813660046145ab565b6109b2565b6102996102943660046149ef565b6109cd565b60405160ff909116815260200161014e565b6102356102b9366004614a1b565b610a25565b6101446102cc366004614a3e565b610a9a565b6101446102df366004614a1b565b610b2d565b6101446102f23660046146c2565b610b9a565b6101446103053660046146c2565b610bb1565b610144610318366004614a85565b610bc8565b60008281526018602052604081206103359083610c5c565b90505b92915050565b6016546000906001190161036557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561038c576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156103b757604051633ee5b89360e01b815260040160405180910390fd5b61040186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c815260186020526040902093925088915050610ca0565b6001601655979650505050505050565b600083815260186020526040812061042a9084846114d0565b949350505050565b6104b2604051806101c001604052806000801916815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160608152602001606081526020016060815260200160608152602001600015158152602001600081525090565b60008281526018602090815260409182902082516101c081018452815481526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b031660e082015260088201805485518186028101860190965280865291949293610100860193929083018282801561057857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161055a575b50505050508152602001600982018054806020026020016040519081016040528092919081815260200182805480156105d057602002820191906000526020600020905b8154815260200190600101908083116105bc575b50505050508152602001600a820180548060200260200160405190810160405280929190818152602001828054801561062857602002820191906000526020600020905b815481526020019060010190808311610614575b50505050508152602001600b820180548060200260200160405190810160405280929190818152602001828054801561068057602002820191906000526020600020905b81548152602001906001019080831161066c575b5050509183525050600c82015460ff1615156020820152600d9091015460409091015292915050565b601654606090600119016106d057604051637ce54e2d60e11b815260040160405180910390fd5b600260165581428110156106f7576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff161561072257604051633ee5b89360e01b815260040160405180910390fd5b600087815260186020526040902061040190878787611561565b6016546000906001190161076357604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561078a576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156107b557604051633ee5b89360e01b815260040160405180910390fd5b6107e36107c289886109cd565b6107cc8a886109cd565b60008b815260186020526040902091908a886118fe565b600160165598975050505050505050565b600081815260186020526040812061033890611cfa565b600084815260186020526040812061082590858585611d05565b95945050505050565b6016546000906001190161085557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561087c576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156108a757604051633ee5b89360e01b815260040160405180910390fd5b6107e36108b489886109cd565b6108be8a886109cd565b60008b815260186020526040902091908a88611fd5565b601654600090600119016108fc57604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610923576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff161561094e57604051633ee5b89360e01b815260040160405180910390fd5b61040186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c815260186020526040902093925088915050612362565b600084815260186020526040812061082590858585612b55565b60008281526018602052604090206060906103359083612bb6565b60008281526019602090815260408083206001600160a01b038516808552925282205460ff16906109fe8583610a25565b6001600160a01b0316146103355760405163336752bb60e01b815260040160405180910390fd5b60008281526018602052604081206008015460ff831610610a585760405162e6731760e41b815260040160405180910390fd5b6000838152601860205260409020600801805460ff8416908110610a7e57610a7e614add565b6000918252602090912001546001600160a01b03169392505050565b60165460009060011901610ac157604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610ae8576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff1615610b1357604051633ee5b89360e01b815260040160405180910390fd5b600087815260186020526040902061040190878787612c8d565b6000828152601860205260408120600a015460ff831610610b6157604051634105699160e01b815260040160405180910390fd5b6000838152601860205260409020600a01805460ff8416908110610b8757610b87614add565b9060005260206000200154905092915050565b600081815260186020526040812061033890612fe7565b600081815260186020526040812061033890612ffe565b60165460009060011901610bef57604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610c16576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff1615610c4157604051633ee5b89360e01b815260040160405180910390fd5b60008881526018602052604090206107e39088888888611fd5565b60088201546000908210610c8b5760405162461bcd60e51b8152600401610c8290614af3565b60405180910390fd5b82600b018281548110610b8757610b87614add565b600080604051806101000160405280600081526020016000815260200160008152602001610ccd87611cfa565b81526020018660070160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200186600a01805480602002602001604051908101604052809291908181526020018280548015610d4d57602002820191906000526020600020905b815481526020019060010190808311610d39575b5050505050815260200186600901805480602002602001604051908101604052809291908181526020018280548015610da557602002820191906000526020600020905b815481526020019060010190808311610d91575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e159190614b1f565b60a082015260088501548451808214610e675760405162461bcd60e51b81526020600482015260146024820152736d69736d6174636820706f6f6c20746f6b656e7360601b6044820152606401610c82565b60808301516040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614b1f565b8511158015610ee357508415155b610eff5760405162461bcd60e51b8152600401610c8290614b38565b6000610f0f8860050154846130d1565b905060008367ffffffffffffffff811115610f2c57610f2c614b5f565b604051908082528060200260200182016040528015610f55578160200160208202803683370190505b50905060008467ffffffffffffffff811115610f7357610f73614b5f565b604051908082528060200260200182016040528015610f9c578160200160208202803683370190505b509050610fbe610fb48760c001518860e001516130fd565b8760600151613208565b865260005b858110156110af57898181518110610fdd57610fdd614add565b60200260200101518760c001518281518110610ffb57610ffb614add565b602002602001015110156110515760405162461bcd60e51b815260206004820152601c60248201527f7769746864726177206d6f7265207468616e20617661696c61626c65000000006044820152606401610c82565b89818151811061106357611063614add565b60200260200101518760c00151828151811061108157611081614add565b60200260200101510382828151811061109c5761109c614add565b6020908102919091010152600101610fc3565b506110c1610fb4828860e001516130fd565b602087015260005b858110156112b257600087600001518860c0015183815181106110ee576110ee614add565b602002602001015189602001516111059190614b8b565b61110f9190614ba2565b9050600061113f84848151811061112857611128614add565b6020026020010151836133b590919063ffffffff16565b90506402540be4006111518288614b8b565b61115b9190614ba2565b85848151811061116d5761116d614add565b602002602001018181525050505060006402540be4008c6006015485848151811061119a5761119a614add565b60200260200101516111ac9190614b8b565b6111b69190614ba2565b9050808383815181106111cb576111cb614add565b60200260200101516111dd9190614bc4565b8c600a0183815481106111f2576111f2614add565b9060005260206000200181905550808c600b01838154811061121657611216614add565b906000526020600020015461122b9190614bd7565b8c600b01838154811061124057611240614add565b906000526020600020018190555083828151811061126057611260614add565b602002602001015183838151811061127a5761127a614add565b602002602001015161128c9190614bc4565b83838151811061129e5761129e614add565b6020908102919091010152506001016110c9565b506112c4610fb4828860e001516130fd565b60408701819052865160a08801516000935090916112e29083614bc4565b6112ec9190614b8b565b6112f69190614ba2565b9050806000036113375760405162461bcd60e51b815260206004820152600c60248201526b085e995c9bc8185b5bdd5b9d60a21b6044820152606401610c82565b611342816001614bd7565b9050878111156113945760405162461bcd60e51b815260206004820152601b60248201527f746f6b656e416d6f756e74203e206d61784275726e416d6f756e7400000000006044820152606401610c82565b608086015160405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b5050505060005b858110156114635761145b8b600801828154811061141d5761141d614add565b9060005260206000200160009054906101000a90046001600160a01b0316338c848151811061144e5761144e614add565b60200260200101516133da565b6001016113fd565b50336001600160a01b03168a600001547fa404896827f41a3845de89f154bf1f4fe5cbdf79da7c7805263a3d0b7de9e6728b858a60200151868c60a001516114ab9190614bc4565b6040516114bb9493929190614bea565b60405180910390a39998505050505050505050565b6000806115578585858860070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190614b1f565b61341e565b5095945050505050565b60078401546040516370a0823160e01b81523360048201526060916001600160a01b03169081906370a0823190602401602060405180830381865afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d29190614b1f565b8511156115f15760405162461bcd60e51b8152600401610c8290614b38565b600886015483811461163b5760405162461bcd60e51b81526020600482015260136024820152726d69736d6174636820706f6f6c546f6b656e7360681b6044820152606401610c82565b600087600a0180548060200260200160405190810160405280929190818152602001828054801561168b57602002820191906000526020600020905b815481526020019060010190808311611677575b505050505090506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190614b1f565b90506000611705838a84613495565b805190915060005b818110156118485789898281811061172757611727614add565b9050602002013583828151811061174057611740614add565b602002602001015110156117965760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e74735b695d203c206d696e416d6f756e74735b695d0000000000006044820152606401610c82565b8281815181106117a8576117a8614add565b60200260200101518582815181106117c2576117c2614add565b60200260200101516117d49190614bc4565b8c600a0182815481106117e9576117e9614add565b90600052602060002001819055506118408c600801828154811061180f5761180f614add565b9060005260206000200160009054906101000a90046001600160a01b03163385848151811061144e5761144e614add565b60010161170d565b5060405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b50508c5433925090507f58f96d387ac27c23fb6350424cb6b032322b14ffd82029e96aeed2c525e790e8846118da8e88614bc4565b6040516118e8929190614c23565b60405180910390a3509998505050505050505050565b600c85015460009060ff16156119265760405162461bcd60e51b8152600401610c8290614c45565b85600a018460ff168154811061193e5761193e614add565b90600052602060002001548311156119885760405162461bcd60e51b815260206004820152600d60248201526c3e706f6f6c2062616c616e636560981b6044820152606401610c82565b600080600088600a018054806020026020016040519081016040528092919081815260200182805480156119db57602002820191906000526020600020905b8154815260200190600101908083116119c7575b505050505090506119ef8989898985613586565b909350915084831115611a315760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610c82565b6000896009018960ff1681548110611a4b57611a4b614add565b90600052602060002001546402540be4008b6006015485611a6c9190614b8b565b611a769190614ba2565b611a809190614ba2565b90508084838b60ff1681518110611a9957611a99614add565b6020026020010151611aab9190614bd7565b611ab59190614bc4565b8a600a018a60ff1681548110611acd57611acd614add565b906000526020600020018190555086828960ff1681518110611af157611af1614add565b6020026020010151611b039190614bc4565b8a600a018960ff1681548110611b1b57611b1b614add565b6000918252602090912001558015611b8057808a600b018a60ff1681548110611b4657611b46614add565b9060005260206000200154611b5b9190614bd7565b8a600b018a60ff1681548110611b7357611b73614add565b6000918252602090912001555b60008a6008018a60ff1681548110611b9a57611b9a614add565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c129190614b1f565b851115611c555760405162461bcd60e51b815260206004820152601160248201527036b7b932903a3430b7103cb7ba9037bbb760791b6044820152606401610c82565b611c5f81866137a6565b50611c978a6008018960ff1681548110611c7b57611c7b614add565b6000918252602090912001546001600160a01b031633896133da565b895460408051868152602081018a905260ff808d1692820192909252908a1660608201523391907f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320906080015b60405180910390a3509198975050505050505050565b6000610338826138f7565b60008085600a01805480602002602001604051908101604052809291908181526020018280548015611d5657602002820191906000526020600020905b815481526020019060010190808311611d42575b5050835193945050508582149050611db05760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206c656e677468206f6620616d6f756e7473000000000000006044820152606401610c82565b6000611dbb88611cfa565b9050600088600901805480602002602001604051908101604052809291908181526020018280548015611e0d57602002820191906000526020600020905b815481526020019060010190808311611df9575b505050505090506000611e29611e2386846130fd565b84613208565b905060005b84811015611f00578715611e9c57898982818110611e4e57611e4e614add565b90506020020135868281518110611e6757611e67614add565b6020026020010151611e799190614bd7565b868281518110611e8b57611e8b614add565b602002602001018181525050611ef8565b898982818110611eae57611eae614add565b90506020020135868281518110611ec757611ec7614add565b6020026020010151611ed99190614bc4565b868281518110611eeb57611eeb614add565b6020026020010181815250505b600101611e2e565b506000611f16611f1087856130fd565b85613208565b905060008b60070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f939190614b1f565b90508815611fc9578281611fa78285614bc4565b611fb19190614b8b565b611fbb9190614ba2565b97505050505050505061042a565b8281611fa78483614bc4565b600c85015460009060ff1615611ffd5760405162461bcd60e51b8152600401610c8290614c45565b6000866008018660ff168154811061201757612017614add565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f9190614b1f565b8411156120d75760405162461bcd60e51b815260206004820152601660248201527539bbb0b81036b7b932903a3430b7103cb7ba9037bbb760511b6044820152606401610c82565b6120e181856137a6565b50600080600088600a0180548060200260200160405190810160405280929190818152602001828054801561213557602002820191906000526020600020905b815481526020019060010190808311612121575b505050505090506121498989898985613940565b90935091508483101561218b5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b6044820152606401610c82565b6000896009018860ff16815481106121a5576121a5614add565b90600052602060002001546402540be4008b60060154856121c69190614b8b565b6121d09190614ba2565b6121da9190614ba2565b905086828a60ff16815181106121f2576121f2614add565b60200260200101516122049190614bd7565b8a600a018a60ff168154811061221c5761221c614add565b90600052602060002001819055508084838a60ff168151811061224157612241614add565b60200260200101516122539190614bc4565b61225d9190614bc4565b8a600a018960ff168154811061227557612275614add565b60009182526020909120015580156122da57808a600b018960ff16815481106122a0576122a0614add565b90600052602060002001546122b59190614bd7565b8a600b018960ff16815481106122cd576122cd614add565b6000918252602090912001555b6123118a6008018960ff16815481106122f5576122f5614add565b6000918252602090912001546001600160a01b031633866133da565b8954604080518981526020810187905260ff808d1692820192909252908a1660608201523391907f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df32090608001611ce4565b600c83015460009060ff161561238a5760405162461bcd60e51b8152600401610c8290614c45565b6008840154835181146123d85760405162461bcd60e51b81526020600482015260166024820152756d69736d6174636820706f6f6c656420746f6b656e7360501b6044820152606401610c82565b600060405180610100016040528060008152602001600081526020016000815260200161240488611cfa565b81526020018760070160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200187600a0180548060200260200160405190810160405280929190818152602001828054801561248457602002820191906000526020600020905b815481526020019060010190808311612470575b50505050508152602001876009018054806020026020016040519081016040528092919081815260200182805480156124dc57602002820191906000526020600020905b8154815260200190600101908083116124c8575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254c9190614b1f565b60a082018190521561257a5761257761256d8260c001518360e001516130fd565b8260600151613208565b81525b60008267ffffffffffffffff81111561259557612595614b5f565b6040519080825280602002602001820160405280156125be578160200160208202803683370190505b50905060005b8381101561271d5760a08301511515806125f857508681815181106125eb576125eb614add565b6020026020010151600014155b6126395760405162461bcd60e51b815260206004820152601260248201527121737570706c7920616c6c20746f6b656e7360701b6044820152606401610c82565b86818151811061264b5761264b614add565b60200260200101516000146126b657600088600801828154811061267157612671614add565b9060005260206000200160009054906101000a90046001600160a01b031690506126b4818984815181106126a7576126a7614add565b60200260200101516137a6565b505b8681815181106126c8576126c8614add565b60200260200101518360c0015182815181106126e6576126e6614add565b60200260200101516126f89190614bd7565b82828151811061270a5761270a614add565b60209081029190910101526001016125c4565b5061273961272f828460e001516130fd565b8360600151613208565b602083018190528251106127835760405162461bcd60e51b8152602060048201526011602482015270442073686f756c6420696e63726561736560781b6044820152606401610c82565b6020820151604083015260008367ffffffffffffffff8111156127a8576127a8614b5f565b6040519080825280602002602001820160405280156127d1578160200160208202803683370190505b5090508260a001516000146129e95760006127f08960050154866130d1565b905060005b858110156129c257600085600001518660c00151838151811061281a5761281a614add565b602002602001015187602001516128319190614b8b565b61283b9190614ba2565b90506402540be40061285886848151811061112857611128614add565b6128629085614b8b565b61286c9190614ba2565b84838151811061287e5761287e614add565b60200260200101818152505060006402540be4008c600601548685815181106128a9576128a9614add565b60200260200101516128bb9190614b8b565b6128c59190614ba2565b9050808684815181106128da576128da614add565b60200260200101516128ec9190614bc4565b8c600a01848154811061290157612901614add565b9060005260206000200181905550808c600b01848154811061292557612925614add565b906000526020600020015461293a9190614bd7565b8c600b01848154811061294f5761294f614add565b906000526020600020018190555084838151811061296f5761296f614add565b602002602001015186848151811061298957612989614add565b602002602001015161299b9190614bc4565b8684815181106129ad576129ad614add565b602090810291909101015250506001016127f5565b506129de6129d4848660e001516130fd565b8560600151613208565b604085015250612a00565b81516129fe90600a8a0190602085019061454b565b505b60008360a00151600003612a1957506020830151612a47565b835160a08501516040860151612a30908390614bc4565b612a3a9190614b8b565b612a449190614ba2565b90505b86811015612a845760405162461bcd60e51b815260206004820152600a60248201526936b4b73a101e1036b4b760b11b6044820152606401610c82565b60808401516040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015612ad257600080fd5b505af1158015612ae6573d6000803e3d6000fd5b50505050336001600160a01b031689600001547fbcb1ab680ee25ef87d34ec297263a10e0a823cd81326b0aa6bc55b86cb2a41888a858860200151868a60a00151612b319190614bd7565b604051612b419493929190614bea565b60405180910390a398975050505050505050565b60006115578585858589600a01805480602002602001604051908101604052809291908181526020018280548015612bac57602002820191906000526020600020905b815481526020019060010190808311612b98575b5050505050613940565b606061033583600a01805480602002602001604051908101604052809291908181526020018280548015612c0957602002820191906000526020600020905b815481526020019060010190808311612bf5575b5050505050838560070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c889190614b1f565b613495565b60078401546040516370a0823160e01b81523360048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614b1f565b851115612d1d5760405162461bcd60e51b8152600401610c8290614b38565b600886015460ff85168111612d605760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b6044820152606401610c82565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc49190614b1f565b9050600080612dd58a8a8a8661341e565b9150915086821015612e1a5760405162461bcd60e51b815260206004820152600e60248201526d191e480f081b5a5b905b5bdd5b9d60921b6044820152606401610c82565b60006402540be4008b6006015483612e329190614b8b565b612e3c9190614ba2565b9050612e488184614bd7565b8b600a018a60ff1681548110612e6057612e60614add565b9060005260206000200154612e759190614bc4565b8b600a018a60ff1681548110612e8d57612e8d614add565b6000918252602090912001558015612ef257808b600b018a60ff1681548110612eb857612eb8614add565b9060005260206000200154612ecd9190614bd7565b8b600b018a60ff1681548110612ee557612ee5614add565b6000918252602090912001555b60405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b50505050612f898b6008018a60ff1681548110612f6d57612f6d614add565b6000918252602090912001546001600160a01b031633856133da565b8a54604080518c81526020810187905260ff8c16818301526060810186905290513392917f1a66f6ea1c14e22a62ab434f3414908bb5f49133d673c872c8957aa961e4c215919081900360800190a350909998505050505050505050565b60006064612ff4836138f7565b6103389190614ba2565b60008061301b61300d84613ae1565b61301685611cfa565b613208565b905060008360070160009054906101000a90046001600160a01b031690506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309d9190614b1f565b905080156130c657806130b26012600a614d50565b6130bc9085614b8b565b6108259190614ba2565b506000949350505050565b60006130de600183614bc4565b6130e9906004614b8b565b6130f38385614b8b565b6103359190614ba2565b8151815160609190811461314a5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610c82565b60008167ffffffffffffffff81111561316557613165614b5f565b60405190808252806020026020018201604052801561318e578160200160208202803683370190505b50905060005b828110156131ff578481815181106131ae576131ae614add565b60200260200101518682815181106131c8576131c8614add565b60200260200101516131da9190614b8b565b8282815181106131ec576131ec614add565b6020908102919091010152600101613194565b50949350505050565b815160009081805b828110156132475785818151811061322a5761322a614add565b60200260200101518261323d9190614bd7565b9150600101613210565b508060000361325b57600092505050610338565b600081816132698588614b8b565b905060005b610100811015613376578260005b878110156132c757878b828151811061329757613297614add565b60200260200101516132a99190614b8b565b6132b38684614b8b565b6132bd9190614ba2565b915060010161327c565b50839450808760016132d99190614bd7565b6132e39190614b8b565b6064856132f08287614bc4565b6132fa9190614b8b565b6133049190614ba2565b61330e9190614bd7565b846133198984614b8b565b60646133258a88614b8b565b61332f9190614ba2565b6133399190614bd7565b6133439190614b8b565b61334d9190614ba2565b93506133598486613b91565b1561336d5783975050505050505050610338565b5060010161326e565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610c82565b6000818311156133d0576133c98284614bc4565b9050610338565b6103358383614bc4565b806000036133e757505050565b6001600160a01b03831661340e57604051633a48ca7b60e11b815260040160405180910390fd5b613419838383613ba7565b505050565b600080600080600061343289888a89613c0a565b8093508194508295505050506000838a6009018960ff168154811061345957613459614add565b906000526020600020015484846134709190614bc4565b61347a9190614ba2565b6134849190614bc4565b939a93995092975050505050505050565b6060818311156134dd5760405162461bcd60e51b815260206004820152601360248201527265786365656420746f74616c20737570706c7960681b6044820152606401610c82565b835160008167ffffffffffffffff8111156134fa576134fa614b5f565b604051908082528060200260200182016040528015613523578160200160208202803683370190505b50905060005b8281101561155757848688838151811061354557613545614add565b60200260200101516135579190614b8b565b6135619190614ba2565b82828151811061357357613573614add565b6020908102919091010152600101613529565b6000808460ff168660ff16036135d85760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610c82565b60008760090180548060200260200160405190810160405280929190818152602001828054801561362857602002820191906000526020600020905b815481526020019060010190808311613614575b50505050509050600061363b85836130fd565b905080518860ff16108015613653575080518760ff16105b61366f5760405162461bcd60e51b8152600401610c8290614af3565b600061367a8a611cfa565b905060006136888383613208565b9050838960ff168151811061369f5761369f614add565b6020026020010151886136b29190614b8b565b838a60ff16815181106136c7576136c7614add565b60200260200101516136d99190614bc4565b838a60ff16815181106136ee576136ee614add565b6020026020010181815250506000613708838c8685613f17565b9050838b60ff168151811061371f5761371f614add565b60200260200101518160016137349190614bd7565b61373e9190614bc4565b96506402540be4008c60050154886137569190614b8b565b6137609190614ba2565b9550848b60ff168151811061377757613777614add565b6020026020010151868861378b9190614bd7565b6137959190614ba2565b965050505050509550959350505050565b806000036137b2575050565b6001600160a01b0382166137d957604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138469190614b1f565b905061385d6001600160a01b038316333086614106565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c99190614b1f565b6138d39190614bc4565b146138f157604051630e40773560e21b815260040160405180910390fd5b50505050565b60048101546002820154600183015490919080831480159061391857508142105b15613939576000846003015490508083038142038502428503840201049350505b5050919050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561399357602002820191906000526020600020905b81548152602001906001019080831161397f575b5050505050905060006139a685836130fd565b905080518860ff161080156139be575080518760ff16105b6139da5760405162461bcd60e51b8152600401610c8290614af3565b6000818960ff16815181106139f1576139f1614add565b6020026020010151838a60ff1681518110613a0e57613a0e614add565b602002602001015188613a219190614b8b565b613a2b9190614bd7565b90506000613a44613a3b8c611cfa565b8b8b858761413e565b9050600181848b60ff1681518110613a5e57613a5e614add565b6020026020010151613a709190614bc4565b613a7a9190614bc4565b95506402540be4008b6005015487613a929190614b8b565b613a9c9190614ba2565b9450838960ff1681518110613ab357613ab3614add565b60200260200101518587613ac79190614bc4565b613ad19190614ba2565b9550505050509550959350505050565b606061033882600a01805480602002602001604051908101604052809291908181526020018280548015613b3457602002820191906000526020600020905b815481526020019060010190808311613b20575b505050505083600901805480602002602001604051908101604052809291908181526020018280548015613b8757602002820191906000526020600020905b815481526020019060010190808311613b73575b50505050506130fd565b60006002613b9f84846133b5565b109392505050565b6040516001600160a01b03831660248201526044810182905261341990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614356565b600080600080613c1988613ae1565b905080518760ff1610613c3e5760405162461bcd60e51b8152600401610c8290614af3565b60006040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509050613c7789611cfa565b60808201819052613c89908390613208565b8082528690613c989089614b8b565b613ca29190614ba2565b8151613cae9190614bc4565b60208201528151829060ff8a16908110613cca57613cca614add565b6020026020010151871115613d155760405162461bcd60e51b81526020600482015260116024820152706578636565647320617661696c61626c6560781b6044820152606401610c82565b613d29816080015189848460200151613f17565b6040820152815160009067ffffffffffffffff811115613d4b57613d4b614b5f565b604051908082528060200260200182016040528015613d74578160200160208202803683370190505b509050613d868a6005015484516130d1565b6060830152825160005b81811015613e63576000858281518110613dac57613dac614add565b602002602001015190506402540be40085606001518d60ff168414613df55786516020880151613ddc9085614b8b565b613de69190614ba2565b613df09084614bc4565b613e1f565b604087015187516020890151613e0b9086614b8b565b613e159190614ba2565b613e1f9190614bc4565b613e299190614b8b565b613e339190614ba2565b613e3d9082614bc4565b848381518110613e4f57613e4f614add565b602090810291909101015250600101613d90565b506000613e7a84608001518c858760200151613f17565b838c60ff1681518110613e8f57613e8f614add565b6020026020010151613ea19190614bc4565b90508b6009018b60ff1681548110613ebb57613ebb614add565b9060005260206000200154600182613ed39190614bc4565b613edd9190614ba2565b9050808460400151868d60ff1681518110613efa57613efa614add565b602002602001015197509750975050505050509450945094915050565b815160009060ff85168111613f605760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610c82565b82600080613f6e848a614b8b565b905060005b84811015613ff0578860ff168114613fe857878181518110613f9757613f97614add565b602002602001015183613faa9190614bd7565b925084888281518110613fbf57613fbf614add565b6020026020010151613fd19190614b8b565b613fdb8886614b8b565b613fe59190614ba2565b93505b600101613f73565b50613ffb8482614b8b565b60646140078886614b8b565b6140119190614b8b565b61401b9190614ba2565b925060008161402b606489614b8b565b6140359190614ba2565b61403f9084614bd7565b9050600087815b6101008110156140bd5781925089848360026140629190614b8b565b61406c9190614bd7565b6140769190614bc4565b876140818480614b8b565b61408b9190614bd7565b6140959190614ba2565b91506140a18284613b91565b156140b55750965061042a95505050505050565b600101614046565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610c82565b6040516001600160a01b03808516602483015283166044820152606481018290526138f19085906323b872dd60e01b90608401613bd3565b805160009060ff808616908716036141925760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610c82565b808660ff161080156141a65750808560ff16105b6141e45760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610c82565b60006141f08489613208565b9050806000806142008b86614b8b565b90506000805b86811015614287578b60ff16810361422057899150614253565b8a60ff16811461424b5788818151811061423c5761423c614add565b60200260200101519150614253565b600101614206565b61425d8285614bd7565b93506142698783614b8b565b6142738787614b8b565b61427d9190614ba2565b9450600101614206565b506142928683614b8b565b606461429e8787614b8b565b6142a89190614b8b565b6142b29190614ba2565b93506000826142c2606488614b8b565b6142cc9190614ba2565b6142d69085614bd7565b9050600086815b6101008110156140bd5781925088848360026142f99190614b8b565b6143039190614bd7565b61430d9190614bc4565b886143188480614b8b565b6143229190614bd7565b61432c9190614ba2565b91506143388284613b91565b1561434e57509850610825975050505050505050565b6001016142dd565b60006143ab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144289092919063ffffffff16565b80519091501561341957808060200190518101906143c99190614d5c565b6134195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c82565b606061042a848460008585600080866001600160a01b0316858760405161444f9190614d9d565b60006040518083038185875af1925050503d806000811461448c576040519150601f19603f3d011682016040523d82523d6000602084013e614491565b606091505b50915091506144a2878383876144ad565b979650505050505050565b6060831561451c578251600003614515576001600160a01b0385163b6145155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c82565b508161042a565b61042a83838151156145315781518083602001fd5b8060405162461bcd60e51b8152600401610c829190614db9565b828054828255906000526020600020908101928215614586579160200282015b8281111561458657825182559160200191906001019061456b565b50614592929150614596565b5090565b5b808211156145925760008155600101614597565b600080604083850312156145be57600080fd5b50508035926020909101359150565b60008083601f8401126145df57600080fd5b50813567ffffffffffffffff8111156145f757600080fd5b6020830191508360208260051b850101111561461257600080fd5b9250929050565b60008060008060006080868803121561463157600080fd5b85359450602086013567ffffffffffffffff81111561464f57600080fd5b61465b888289016145cd565b9699909850959660408101359660609091013595509350505050565b803560ff8116811461468857600080fd5b919050565b6000806000606084860312156146a257600080fd5b83359250602084013591506146b960408501614677565b90509250925092565b6000602082840312156146d457600080fd5b5035919050565b600081518084526020808501945080840160005b838110156147145781516001600160a01b0316875295820195908201906001016146ef565b509495945050505050565b600081518084526020808501945080840160005b8381101561471457815187529582019590820190600101614733565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c082015260c082015160e0820152600060e08301516101006147b4818501836001600160a01b03169052565b808501519150506101c061012081818601526147d46101e08601846146db565b9250808601519050601f196101408187860301818801526147f5858461471f565b945080880151925050610160818786030181880152614814858461471f565b945080880151925050610180818786030181880152614833858461471f565b945080880151925050506101a061484d8187018315159052565b959095015193019290925250919050565b60008060008060006080868803121561487657600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561489b57600080fd5b6148a7888289016145cd565b96999598509660600135949350505050565b602081526000610335602083018461471f565b80356001600160a01b038116811461468857600080fd5b60008060008060008060c087890312156148fc57600080fd5b8635955060208701359450614913604088016148cc565b9350614921606088016148cc565b92506080870135915060a087013590509295509295509295565b801515811461494957600080fd5b50565b6000806000806060858703121561496257600080fd5b84359350602085013567ffffffffffffffff81111561498057600080fd5b61498c878288016145cd565b90945092505060408501356149a08161493b565b939692955090935050565b600080600080608085870312156149c157600080fd5b843593506149d160208601614677565b92506149df60408601614677565b9396929550929360600135925050565b60008060408385031215614a0257600080fd5b82359150614a12602084016148cc565b90509250929050565b60008060408385031215614a2e57600080fd5b82359150614a1260208401614677565b600080600080600060a08688031215614a5657600080fd5b8535945060208601359350614a6d60408701614677565b94979396509394606081013594506080013592915050565b60008060008060008060c08789031215614a9e57600080fd5b86359550614aae60208801614677565b9450614abc60408801614677565b9350606087013592506080870135915060a087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b602080825260129082015271696e646578206f7574206f662072616e676560701b604082015260600190565b600060208284031215614b3157600080fd5b5051919050565b6020808252600d908201526c1f2628173130b630b731b2a7b360991b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761033857610338614b75565b600082614bbf57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561033857610338614b75565b8082018082111561033857610338614b75565b608081526000614bfd608083018761471f565b8281036020840152614c0f818761471f565b604084019590955250506060015292915050565b604081526000614c36604083018561471f565b90508260208301529392505050565b6020808252600d908201526c191a5cd8589b1959081c1bdbdb609a1b604082015260600190565b600181815b80851115614ca7578160001904821115614c8d57614c8d614b75565b80851615614c9a57918102915b93841c9390800290614c71565b509250929050565b600082614cbe57506001610338565b81614ccb57506000610338565b8160018114614ce15760028114614ceb57614d07565b6001915050610338565b60ff841115614cfc57614cfc614b75565b50506001821b610338565b5060208310610133831016604e8410600b8410161715614d2a575081810a610338565b614d348383614c6c565b8060001904821115614d4857614d48614b75565b029392505050565b60006103358383614caf565b600060208284031215614d6e57600080fd5b81516103358161493b565b60005b83811015614d94578181015183820152602001614d7c565b50506000910152565b60008251614daf818460208701614d79565b9190910192915050565b6020815260008251806020840152614dd8816040850160208701614d79565b601f01601f1916919091016040019291505056fea2646970667358221220725d77713bb4ba784cabc955431b33a2caa3bf30c9144027c5286c9bedd271e364736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c80638d365457116100ad578063b6618dff11610071578063b6618dff146102be578063bb0577eb146102d1578063d251dc35146102e4578063f495e807146102f7578063ff126de91461030a57600080fd5b80638d3654571461024d5780638f11d27f14610260578063a02288f414610273578063ad94911b14610286578063b3a4eab4146102ab57600080fd5b806374c6b89b116100f457806374c6b89b146101bd5780637652f59d146101d057806376ca2e52146101e357806380b297e8146101f65780638b480b121461020957600080fd5b80631301caa214610131578063241ca57a1461015757806329d99b101461016a5780632d91a5151461017d5780634bbcba8e1461019d575b600080fd5b61014461013f3660046145ab565b61031d565b6040519081526020015b60405180910390f35b610144610165366004614619565b61033e565b61014461017836600461468d565b610411565b61019061018b3660046146c2565b610432565b60405161014e919061474f565b6101b06101ab36600461485e565b6106a9565b60405161014e91906148b9565b6101446101cb3660046148e3565b61073c565b6101446101de3660046146c2565b6107f4565b6101446101f136600461494c565b61080b565b6101446102043660046148e3565b61082e565b6102356102173660046146c2565b6000908152601860205260409020600701546001600160a01b031690565b6040516001600160a01b03909116815260200161014e565b61014461025b366004614619565b6108d5565b61014461026e3660046149ab565b610998565b6101b06102813660046145ab565b6109b2565b6102996102943660046149ef565b6109cd565b60405160ff909116815260200161014e565b6102356102b9366004614a1b565b610a25565b6101446102cc366004614a3e565b610a9a565b6101446102df366004614a1b565b610b2d565b6101446102f23660046146c2565b610b9a565b6101446103053660046146c2565b610bb1565b610144610318366004614a85565b610bc8565b60008281526018602052604081206103359083610c5c565b90505b92915050565b6016546000906001190161036557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561038c576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156103b757604051633ee5b89360e01b815260040160405180910390fd5b61040186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c815260186020526040902093925088915050610ca0565b6001601655979650505050505050565b600083815260186020526040812061042a9084846114d0565b949350505050565b6104b2604051806101c001604052806000801916815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160608152602001606081526020016060815260200160608152602001600015158152602001600081525090565b60008281526018602090815260409182902082516101c081018452815481526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c082015260078201546001600160a01b031660e082015260088201805485518186028101860190965280865291949293610100860193929083018282801561057857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161055a575b50505050508152602001600982018054806020026020016040519081016040528092919081815260200182805480156105d057602002820191906000526020600020905b8154815260200190600101908083116105bc575b50505050508152602001600a820180548060200260200160405190810160405280929190818152602001828054801561062857602002820191906000526020600020905b815481526020019060010190808311610614575b50505050508152602001600b820180548060200260200160405190810160405280929190818152602001828054801561068057602002820191906000526020600020905b81548152602001906001019080831161066c575b5050509183525050600c82015460ff1615156020820152600d9091015460409091015292915050565b601654606090600119016106d057604051637ce54e2d60e11b815260040160405180910390fd5b600260165581428110156106f7576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff161561072257604051633ee5b89360e01b815260040160405180910390fd5b600087815260186020526040902061040190878787611561565b6016546000906001190161076357604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561078a576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156107b557604051633ee5b89360e01b815260040160405180910390fd5b6107e36107c289886109cd565b6107cc8a886109cd565b60008b815260186020526040902091908a886118fe565b600160165598975050505050505050565b600081815260186020526040812061033890611cfa565b600084815260186020526040812061082590858585611d05565b95945050505050565b6016546000906001190161085557604051637ce54e2d60e11b815260040160405180910390fd5b6002601655814281101561087c576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff16156108a757604051633ee5b89360e01b815260040160405180910390fd5b6107e36108b489886109cd565b6108be8a886109cd565b60008b815260186020526040902091908a88611fd5565b601654600090600119016108fc57604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610923576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff161561094e57604051633ee5b89360e01b815260040160405180910390fd5b61040186868080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508c815260186020526040902093925088915050612362565b600084815260186020526040812061082590858585612b55565b60008281526018602052604090206060906103359083612bb6565b60008281526019602090815260408083206001600160a01b038516808552925282205460ff16906109fe8583610a25565b6001600160a01b0316146103355760405163336752bb60e01b815260040160405180910390fd5b60008281526018602052604081206008015460ff831610610a585760405162e6731760e41b815260040160405180910390fd5b6000838152601860205260409020600801805460ff8416908110610a7e57610a7e614add565b6000918252602090912001546001600160a01b03169392505050565b60165460009060011901610ac157604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610ae8576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff1615610b1357604051633ee5b89360e01b815260040160405180910390fd5b600087815260186020526040902061040190878787612c8d565b6000828152601860205260408120600a015460ff831610610b6157604051634105699160e01b815260040160405180910390fd5b6000838152601860205260409020600a01805460ff8416908110610b8757610b87614add565b9060005260206000200154905092915050565b600081815260186020526040812061033890612fe7565b600081815260186020526040812061033890612ffe565b60165460009060011901610bef57604051637ce54e2d60e11b815260040160405180910390fd5b60026016558142811015610c16576040516326f04e8b60e21b815260040160405180910390fd5b601a54600160a01b900460ff1615610c4157604051633ee5b89360e01b815260040160405180910390fd5b60008881526018602052604090206107e39088888888611fd5565b60088201546000908210610c8b5760405162461bcd60e51b8152600401610c8290614af3565b60405180910390fd5b82600b018281548110610b8757610b87614add565b600080604051806101000160405280600081526020016000815260200160008152602001610ccd87611cfa565b81526020018660070160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200186600a01805480602002602001604051908101604052809291908181526020018280548015610d4d57602002820191906000526020600020905b815481526020019060010190808311610d39575b5050505050815260200186600901805480602002602001604051908101604052809291908181526020018280548015610da557602002820191906000526020600020905b815481526020019060010190808311610d91575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e159190614b1f565b60a082015260088501548451808214610e675760405162461bcd60e51b81526020600482015260146024820152736d69736d6174636820706f6f6c20746f6b656e7360601b6044820152606401610c82565b60808301516040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614b1f565b8511158015610ee357508415155b610eff5760405162461bcd60e51b8152600401610c8290614b38565b6000610f0f8860050154846130d1565b905060008367ffffffffffffffff811115610f2c57610f2c614b5f565b604051908082528060200260200182016040528015610f55578160200160208202803683370190505b50905060008467ffffffffffffffff811115610f7357610f73614b5f565b604051908082528060200260200182016040528015610f9c578160200160208202803683370190505b509050610fbe610fb48760c001518860e001516130fd565b8760600151613208565b865260005b858110156110af57898181518110610fdd57610fdd614add565b60200260200101518760c001518281518110610ffb57610ffb614add565b602002602001015110156110515760405162461bcd60e51b815260206004820152601c60248201527f7769746864726177206d6f7265207468616e20617661696c61626c65000000006044820152606401610c82565b89818151811061106357611063614add565b60200260200101518760c00151828151811061108157611081614add565b60200260200101510382828151811061109c5761109c614add565b6020908102919091010152600101610fc3565b506110c1610fb4828860e001516130fd565b602087015260005b858110156112b257600087600001518860c0015183815181106110ee576110ee614add565b602002602001015189602001516111059190614b8b565b61110f9190614ba2565b9050600061113f84848151811061112857611128614add565b6020026020010151836133b590919063ffffffff16565b90506402540be4006111518288614b8b565b61115b9190614ba2565b85848151811061116d5761116d614add565b602002602001018181525050505060006402540be4008c6006015485848151811061119a5761119a614add565b60200260200101516111ac9190614b8b565b6111b69190614ba2565b9050808383815181106111cb576111cb614add565b60200260200101516111dd9190614bc4565b8c600a0183815481106111f2576111f2614add565b9060005260206000200181905550808c600b01838154811061121657611216614add565b906000526020600020015461122b9190614bd7565b8c600b01838154811061124057611240614add565b906000526020600020018190555083828151811061126057611260614add565b602002602001015183838151811061127a5761127a614add565b602002602001015161128c9190614bc4565b83838151811061129e5761129e614add565b6020908102919091010152506001016110c9565b506112c4610fb4828860e001516130fd565b60408701819052865160a08801516000935090916112e29083614bc4565b6112ec9190614b8b565b6112f69190614ba2565b9050806000036113375760405162461bcd60e51b815260206004820152600c60248201526b085e995c9bc8185b5bdd5b9d60a21b6044820152606401610c82565b611342816001614bd7565b9050878111156113945760405162461bcd60e51b815260206004820152601b60248201527f746f6b656e416d6f756e74203e206d61784275726e416d6f756e7400000000006044820152606401610c82565b608086015160405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b5050505060005b858110156114635761145b8b600801828154811061141d5761141d614add565b9060005260206000200160009054906101000a90046001600160a01b0316338c848151811061144e5761144e614add565b60200260200101516133da565b6001016113fd565b50336001600160a01b03168a600001547fa404896827f41a3845de89f154bf1f4fe5cbdf79da7c7805263a3d0b7de9e6728b858a60200151868c60a001516114ab9190614bc4565b6040516114bb9493929190614bea565b60405180910390a39998505050505050505050565b6000806115578585858860070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561152e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115529190614b1f565b61341e565b5095945050505050565b60078401546040516370a0823160e01b81523360048201526060916001600160a01b03169081906370a0823190602401602060405180830381865afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d29190614b1f565b8511156115f15760405162461bcd60e51b8152600401610c8290614b38565b600886015483811461163b5760405162461bcd60e51b81526020600482015260136024820152726d69736d6174636820706f6f6c546f6b656e7360681b6044820152606401610c82565b600087600a0180548060200260200160405190810160405280929190818152602001828054801561168b57602002820191906000526020600020905b815481526020019060010190808311611677575b505050505090506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f69190614b1f565b90506000611705838a84613495565b805190915060005b818110156118485789898281811061172757611727614add565b9050602002013583828151811061174057611740614add565b602002602001015110156117965760405162461bcd60e51b815260206004820152601a60248201527f616d6f756e74735b695d203c206d696e416d6f756e74735b695d0000000000006044820152606401610c82565b8281815181106117a8576117a8614add565b60200260200101518582815181106117c2576117c2614add565b60200260200101516117d49190614bc4565b8c600a0182815481106117e9576117e9614add565b90600052602060002001819055506118408c600801828154811061180f5761180f614add565b9060005260206000200160009054906101000a90046001600160a01b03163385848151811061144e5761144e614add565b60010161170d565b5060405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b50508c5433925090507f58f96d387ac27c23fb6350424cb6b032322b14ffd82029e96aeed2c525e790e8846118da8e88614bc4565b6040516118e8929190614c23565b60405180910390a3509998505050505050505050565b600c85015460009060ff16156119265760405162461bcd60e51b8152600401610c8290614c45565b85600a018460ff168154811061193e5761193e614add565b90600052602060002001548311156119885760405162461bcd60e51b815260206004820152600d60248201526c3e706f6f6c2062616c616e636560981b6044820152606401610c82565b600080600088600a018054806020026020016040519081016040528092919081815260200182805480156119db57602002820191906000526020600020905b8154815260200190600101908083116119c7575b505050505090506119ef8989898985613586565b909350915084831115611a315760405162461bcd60e51b815260206004820152600a6024820152690c8f0407c40dac2f088f60b31b6044820152606401610c82565b6000896009018960ff1681548110611a4b57611a4b614add565b90600052602060002001546402540be4008b6006015485611a6c9190614b8b565b611a769190614ba2565b611a809190614ba2565b90508084838b60ff1681518110611a9957611a99614add565b6020026020010151611aab9190614bd7565b611ab59190614bc4565b8a600a018a60ff1681548110611acd57611acd614add565b906000526020600020018190555086828960ff1681518110611af157611af1614add565b6020026020010151611b039190614bc4565b8a600a018960ff1681548110611b1b57611b1b614add565b6000918252602090912001558015611b8057808a600b018a60ff1681548110611b4657611b46614add565b9060005260206000200154611b5b9190614bd7565b8a600b018a60ff1681548110611b7357611b73614add565b6000918252602090912001555b60008a6008018a60ff1681548110611b9a57611b9a614add565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c129190614b1f565b851115611c555760405162461bcd60e51b815260206004820152601160248201527036b7b932903a3430b7103cb7ba9037bbb760791b6044820152606401610c82565b611c5f81866137a6565b50611c978a6008018960ff1681548110611c7b57611c7b614add565b6000918252602090912001546001600160a01b031633896133da565b895460408051868152602081018a905260ff808d1692820192909252908a1660608201523391907f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320906080015b60405180910390a3509198975050505050505050565b6000610338826138f7565b60008085600a01805480602002602001604051908101604052809291908181526020018280548015611d5657602002820191906000526020600020905b815481526020019060010190808311611d42575b5050835193945050508582149050611db05760405162461bcd60e51b815260206004820152601960248201527f696e76616c6964206c656e677468206f6620616d6f756e7473000000000000006044820152606401610c82565b6000611dbb88611cfa565b9050600088600901805480602002602001604051908101604052809291908181526020018280548015611e0d57602002820191906000526020600020905b815481526020019060010190808311611df9575b505050505090506000611e29611e2386846130fd565b84613208565b905060005b84811015611f00578715611e9c57898982818110611e4e57611e4e614add565b90506020020135868281518110611e6757611e67614add565b6020026020010151611e799190614bd7565b868281518110611e8b57611e8b614add565b602002602001018181525050611ef8565b898982818110611eae57611eae614add565b90506020020135868281518110611ec757611ec7614add565b6020026020010151611ed99190614bc4565b868281518110611eeb57611eeb614add565b6020026020010181815250505b600101611e2e565b506000611f16611f1087856130fd565b85613208565b905060008b60070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f939190614b1f565b90508815611fc9578281611fa78285614bc4565b611fb19190614b8b565b611fbb9190614ba2565b97505050505050505061042a565b8281611fa78483614bc4565b600c85015460009060ff1615611ffd5760405162461bcd60e51b8152600401610c8290614c45565b6000866008018660ff168154811061201757612017614add565b6000918252602090912001546040516370a0823160e01b81523360048201526001600160a01b03909116915081906370a0823190602401602060405180830381865afa15801561206b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208f9190614b1f565b8411156120d75760405162461bcd60e51b815260206004820152601660248201527539bbb0b81036b7b932903a3430b7103cb7ba9037bbb760511b6044820152606401610c82565b6120e181856137a6565b50600080600088600a0180548060200260200160405190810160405280929190818152602001828054801561213557602002820191906000526020600020905b815481526020019060010190808311612121575b505050505090506121498989898985613940565b90935091508483101561218b5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b6044820152606401610c82565b6000896009018860ff16815481106121a5576121a5614add565b90600052602060002001546402540be4008b60060154856121c69190614b8b565b6121d09190614ba2565b6121da9190614ba2565b905086828a60ff16815181106121f2576121f2614add565b60200260200101516122049190614bd7565b8a600a018a60ff168154811061221c5761221c614add565b90600052602060002001819055508084838a60ff168151811061224157612241614add565b60200260200101516122539190614bc4565b61225d9190614bc4565b8a600a018960ff168154811061227557612275614add565b60009182526020909120015580156122da57808a600b018960ff16815481106122a0576122a0614add565b90600052602060002001546122b59190614bd7565b8a600b018960ff16815481106122cd576122cd614add565b6000918252602090912001555b6123118a6008018960ff16815481106122f5576122f5614add565b6000918252602090912001546001600160a01b031633866133da565b8954604080518981526020810187905260ff808d1692820192909252908a1660608201523391907f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df32090608001611ce4565b600c83015460009060ff161561238a5760405162461bcd60e51b8152600401610c8290614c45565b6008840154835181146123d85760405162461bcd60e51b81526020600482015260166024820152756d69736d6174636820706f6f6c656420746f6b656e7360501b6044820152606401610c82565b600060405180610100016040528060008152602001600081526020016000815260200161240488611cfa565b81526020018760070160009054906101000a90046001600160a01b03166001600160a01b031681526020016000815260200187600a0180548060200260200160405190810160405280929190818152602001828054801561248457602002820191906000526020600020905b815481526020019060010190808311612470575b50505050508152602001876009018054806020026020016040519081016040528092919081815260200182805480156124dc57602002820191906000526020600020905b8154815260200190600101908083116124c8575b5050505050815250905080608001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254c9190614b1f565b60a082018190521561257a5761257761256d8260c001518360e001516130fd565b8260600151613208565b81525b60008267ffffffffffffffff81111561259557612595614b5f565b6040519080825280602002602001820160405280156125be578160200160208202803683370190505b50905060005b8381101561271d5760a08301511515806125f857508681815181106125eb576125eb614add565b6020026020010151600014155b6126395760405162461bcd60e51b815260206004820152601260248201527121737570706c7920616c6c20746f6b656e7360701b6044820152606401610c82565b86818151811061264b5761264b614add565b60200260200101516000146126b657600088600801828154811061267157612671614add565b9060005260206000200160009054906101000a90046001600160a01b031690506126b4818984815181106126a7576126a7614add565b60200260200101516137a6565b505b8681815181106126c8576126c8614add565b60200260200101518360c0015182815181106126e6576126e6614add565b60200260200101516126f89190614bd7565b82828151811061270a5761270a614add565b60209081029190910101526001016125c4565b5061273961272f828460e001516130fd565b8360600151613208565b602083018190528251106127835760405162461bcd60e51b8152602060048201526011602482015270442073686f756c6420696e63726561736560781b6044820152606401610c82565b6020820151604083015260008367ffffffffffffffff8111156127a8576127a8614b5f565b6040519080825280602002602001820160405280156127d1578160200160208202803683370190505b5090508260a001516000146129e95760006127f08960050154866130d1565b905060005b858110156129c257600085600001518660c00151838151811061281a5761281a614add565b602002602001015187602001516128319190614b8b565b61283b9190614ba2565b90506402540be40061285886848151811061112857611128614add565b6128629085614b8b565b61286c9190614ba2565b84838151811061287e5761287e614add565b60200260200101818152505060006402540be4008c600601548685815181106128a9576128a9614add565b60200260200101516128bb9190614b8b565b6128c59190614ba2565b9050808684815181106128da576128da614add565b60200260200101516128ec9190614bc4565b8c600a01848154811061290157612901614add565b9060005260206000200181905550808c600b01848154811061292557612925614add565b906000526020600020015461293a9190614bd7565b8c600b01848154811061294f5761294f614add565b906000526020600020018190555084838151811061296f5761296f614add565b602002602001015186848151811061298957612989614add565b602002602001015161299b9190614bc4565b8684815181106129ad576129ad614add565b602090810291909101015250506001016127f5565b506129de6129d4848660e001516130fd565b8560600151613208565b604085015250612a00565b81516129fe90600a8a0190602085019061454b565b505b60008360a00151600003612a1957506020830151612a47565b835160a08501516040860151612a30908390614bc4565b612a3a9190614b8b565b612a449190614ba2565b90505b86811015612a845760405162461bcd60e51b815260206004820152600a60248201526936b4b73a101e1036b4b760b11b6044820152606401610c82565b60808401516040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015612ad257600080fd5b505af1158015612ae6573d6000803e3d6000fd5b50505050336001600160a01b031689600001547fbcb1ab680ee25ef87d34ec297263a10e0a823cd81326b0aa6bc55b86cb2a41888a858860200151868a60a00151612b319190614bd7565b604051612b419493929190614bea565b60405180910390a398975050505050505050565b60006115578585858589600a01805480602002602001604051908101604052809291908181526020018280548015612bac57602002820191906000526020600020905b815481526020019060010190808311612b98575b5050505050613940565b606061033583600a01805480602002602001604051908101604052809291908181526020018280548015612c0957602002820191906000526020600020905b815481526020019060010190808311612bf5575b5050505050838560070160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c889190614b1f565b613495565b60078401546040516370a0823160e01b81523360048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614b1f565b851115612d1d5760405162461bcd60e51b8152600401610c8290614b38565b600886015460ff85168111612d605760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b6044820152606401610c82565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc49190614b1f565b9050600080612dd58a8a8a8661341e565b9150915086821015612e1a5760405162461bcd60e51b815260206004820152600e60248201526d191e480f081b5a5b905b5bdd5b9d60921b6044820152606401610c82565b60006402540be4008b6006015483612e329190614b8b565b612e3c9190614ba2565b9050612e488184614bd7565b8b600a018a60ff1681548110612e6057612e60614add565b9060005260206000200154612e759190614bc4565b8b600a018a60ff1681548110612e8d57612e8d614add565b6000918252602090912001558015612ef257808b600b018a60ff1681548110612eb857612eb8614add565b9060005260206000200154612ecd9190614bd7565b8b600b018a60ff1681548110612ee557612ee5614add565b6000918252602090912001555b60405163079cc67960e41b8152336004820152602481018b90526001600160a01b038716906379cc679090604401600060405180830381600087803b158015612f3a57600080fd5b505af1158015612f4e573d6000803e3d6000fd5b50505050612f898b6008018a60ff1681548110612f6d57612f6d614add565b6000918252602090912001546001600160a01b031633856133da565b8a54604080518c81526020810187905260ff8c16818301526060810186905290513392917f1a66f6ea1c14e22a62ab434f3414908bb5f49133d673c872c8957aa961e4c215919081900360800190a350909998505050505050505050565b60006064612ff4836138f7565b6103389190614ba2565b60008061301b61300d84613ae1565b61301685611cfa565b613208565b905060008360070160009054906101000a90046001600160a01b031690506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309d9190614b1f565b905080156130c657806130b26012600a614d50565b6130bc9085614b8b565b6108259190614ba2565b506000949350505050565b60006130de600183614bc4565b6130e9906004614b8b565b6130f38385614b8b565b6103359190614ba2565b8151815160609190811461314a5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b6044820152606401610c82565b60008167ffffffffffffffff81111561316557613165614b5f565b60405190808252806020026020018201604052801561318e578160200160208202803683370190505b50905060005b828110156131ff578481815181106131ae576131ae614add565b60200260200101518682815181106131c8576131c8614add565b60200260200101516131da9190614b8b565b8282815181106131ec576131ec614add565b6020908102919091010152600101613194565b50949350505050565b815160009081805b828110156132475785818151811061322a5761322a614add565b60200260200101518261323d9190614bd7565b9150600101613210565b508060000361325b57600092505050610338565b600081816132698588614b8b565b905060005b610100811015613376578260005b878110156132c757878b828151811061329757613297614add565b60200260200101516132a99190614b8b565b6132b38684614b8b565b6132bd9190614ba2565b915060010161327c565b50839450808760016132d99190614bd7565b6132e39190614b8b565b6064856132f08287614bc4565b6132fa9190614b8b565b6133049190614ba2565b61330e9190614bd7565b846133198984614b8b565b60646133258a88614b8b565b61332f9190614ba2565b6133399190614bd7565b6133439190614b8b565b61334d9190614ba2565b93506133598486613b91565b1561336d5783975050505050505050610338565b5060010161326e565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b6044820152606401610c82565b6000818311156133d0576133c98284614bc4565b9050610338565b6103358383614bc4565b806000036133e757505050565b6001600160a01b03831661340e57604051633a48ca7b60e11b815260040160405180910390fd5b613419838383613ba7565b505050565b600080600080600061343289888a89613c0a565b8093508194508295505050506000838a6009018960ff168154811061345957613459614add565b906000526020600020015484846134709190614bc4565b61347a9190614ba2565b6134849190614bc4565b939a93995092975050505050505050565b6060818311156134dd5760405162461bcd60e51b815260206004820152601360248201527265786365656420746f74616c20737570706c7960681b6044820152606401610c82565b835160008167ffffffffffffffff8111156134fa576134fa614b5f565b604051908082528060200260200182016040528015613523578160200160208202803683370190505b50905060005b8281101561155757848688838151811061354557613545614add565b60200260200101516135579190614b8b565b6135619190614ba2565b82828151811061357357613573614add565b6020908102919091010152600101613529565b6000808460ff168660ff16036135d85760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610c82565b60008760090180548060200260200160405190810160405280929190818152602001828054801561362857602002820191906000526020600020905b815481526020019060010190808311613614575b50505050509050600061363b85836130fd565b905080518860ff16108015613653575080518760ff16105b61366f5760405162461bcd60e51b8152600401610c8290614af3565b600061367a8a611cfa565b905060006136888383613208565b9050838960ff168151811061369f5761369f614add565b6020026020010151886136b29190614b8b565b838a60ff16815181106136c7576136c7614add565b60200260200101516136d99190614bc4565b838a60ff16815181106136ee576136ee614add565b6020026020010181815250506000613708838c8685613f17565b9050838b60ff168151811061371f5761371f614add565b60200260200101518160016137349190614bd7565b61373e9190614bc4565b96506402540be4008c60050154886137569190614b8b565b6137609190614ba2565b9550848b60ff168151811061377757613777614add565b6020026020010151868861378b9190614bd7565b6137959190614ba2565b965050505050509550959350505050565b806000036137b2575050565b6001600160a01b0382166137d957604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138469190614b1f565b905061385d6001600160a01b038316333086614106565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156138a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c99190614b1f565b6138d39190614bc4565b146138f157604051630e40773560e21b815260040160405180910390fd5b50505050565b60048101546002820154600183015490919080831480159061391857508142105b15613939576000846003015490508083038142038502428503840201049350505b5050919050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561399357602002820191906000526020600020905b81548152602001906001019080831161397f575b5050505050905060006139a685836130fd565b905080518860ff161080156139be575080518760ff16105b6139da5760405162461bcd60e51b8152600401610c8290614af3565b6000818960ff16815181106139f1576139f1614add565b6020026020010151838a60ff1681518110613a0e57613a0e614add565b602002602001015188613a219190614b8b565b613a2b9190614bd7565b90506000613a44613a3b8c611cfa565b8b8b858761413e565b9050600181848b60ff1681518110613a5e57613a5e614add565b6020026020010151613a709190614bc4565b613a7a9190614bc4565b95506402540be4008b6005015487613a929190614b8b565b613a9c9190614ba2565b9450838960ff1681518110613ab357613ab3614add565b60200260200101518587613ac79190614bc4565b613ad19190614ba2565b9550505050509550959350505050565b606061033882600a01805480602002602001604051908101604052809291908181526020018280548015613b3457602002820191906000526020600020905b815481526020019060010190808311613b20575b505050505083600901805480602002602001604051908101604052809291908181526020018280548015613b8757602002820191906000526020600020905b815481526020019060010190808311613b73575b50505050506130fd565b60006002613b9f84846133b5565b109392505050565b6040516001600160a01b03831660248201526044810182905261341990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614356565b600080600080613c1988613ae1565b905080518760ff1610613c3e5760405162461bcd60e51b8152600401610c8290614af3565b60006040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509050613c7789611cfa565b60808201819052613c89908390613208565b8082528690613c989089614b8b565b613ca29190614ba2565b8151613cae9190614bc4565b60208201528151829060ff8a16908110613cca57613cca614add565b6020026020010151871115613d155760405162461bcd60e51b81526020600482015260116024820152706578636565647320617661696c61626c6560781b6044820152606401610c82565b613d29816080015189848460200151613f17565b6040820152815160009067ffffffffffffffff811115613d4b57613d4b614b5f565b604051908082528060200260200182016040528015613d74578160200160208202803683370190505b509050613d868a6005015484516130d1565b6060830152825160005b81811015613e63576000858281518110613dac57613dac614add565b602002602001015190506402540be40085606001518d60ff168414613df55786516020880151613ddc9085614b8b565b613de69190614ba2565b613df09084614bc4565b613e1f565b604087015187516020890151613e0b9086614b8b565b613e159190614ba2565b613e1f9190614bc4565b613e299190614b8b565b613e339190614ba2565b613e3d9082614bc4565b848381518110613e4f57613e4f614add565b602090810291909101015250600101613d90565b506000613e7a84608001518c858760200151613f17565b838c60ff1681518110613e8f57613e8f614add565b6020026020010151613ea19190614bc4565b90508b6009018b60ff1681548110613ebb57613ebb614add565b9060005260206000200154600182613ed39190614bc4565b613edd9190614ba2565b9050808460400151868d60ff1681518110613efa57613efa614add565b602002602001015197509750975050505050509450945094915050565b815160009060ff85168111613f605760405162461bcd60e51b815260206004820152600f60248201526e151bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610c82565b82600080613f6e848a614b8b565b905060005b84811015613ff0578860ff168114613fe857878181518110613f9757613f97614add565b602002602001015183613faa9190614bd7565b925084888281518110613fbf57613fbf614add565b6020026020010151613fd19190614b8b565b613fdb8886614b8b565b613fe59190614ba2565b93505b600101613f73565b50613ffb8482614b8b565b60646140078886614b8b565b6140119190614b8b565b61401b9190614ba2565b925060008161402b606489614b8b565b6140359190614ba2565b61403f9084614bd7565b9050600087815b6101008110156140bd5781925089848360026140629190614b8b565b61406c9190614bd7565b6140769190614bc4565b876140818480614b8b565b61408b9190614bd7565b6140959190614ba2565b91506140a18284613b91565b156140b55750965061042a95505050505050565b600101614046565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e766572676500006044820152606401610c82565b6040516001600160a01b03808516602483015283166044820152606481018290526138f19085906323b872dd60e01b90608401613bd3565b805160009060ff808616908716036141925760405162461bcd60e51b815260206004820152601760248201527631b7b6b830b932903a37b5b2b7103a379034ba39b2b63360491b6044820152606401610c82565b808660ff161080156141a65750808560ff16105b6141e45760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b6044820152606401610c82565b60006141f08489613208565b9050806000806142008b86614b8b565b90506000805b86811015614287578b60ff16810361422057899150614253565b8a60ff16811461424b5788818151811061423c5761423c614add565b60200260200101519150614253565b600101614206565b61425d8285614bd7565b93506142698783614b8b565b6142738787614b8b565b61427d9190614ba2565b9450600101614206565b506142928683614b8b565b606461429e8787614b8b565b6142a89190614b8b565b6142b29190614ba2565b93506000826142c2606488614b8b565b6142cc9190614ba2565b6142d69085614bd7565b9050600086815b6101008110156140bd5781925088848360026142f99190614b8b565b6143039190614bd7565b61430d9190614bc4565b886143188480614b8b565b6143229190614bd7565b61432c9190614ba2565b91506143388284613b91565b1561434e57509850610825975050505050505050565b6001016142dd565b60006143ab826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144289092919063ffffffff16565b80519091501561341957808060200190518101906143c99190614d5c565b6134195760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c82565b606061042a848460008585600080866001600160a01b0316858760405161444f9190614d9d565b60006040518083038185875af1925050503d806000811461448c576040519150601f19603f3d011682016040523d82523d6000602084013e614491565b606091505b50915091506144a2878383876144ad565b979650505050505050565b6060831561451c578251600003614515576001600160a01b0385163b6145155760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c82565b508161042a565b61042a83838151156145315781518083602001fd5b8060405162461bcd60e51b8152600401610c829190614db9565b828054828255906000526020600020908101928215614586579160200282015b8281111561458657825182559160200191906001019061456b565b50614592929150614596565b5090565b5b808211156145925760008155600101614597565b600080604083850312156145be57600080fd5b50508035926020909101359150565b60008083601f8401126145df57600080fd5b50813567ffffffffffffffff8111156145f757600080fd5b6020830191508360208260051b850101111561461257600080fd5b9250929050565b60008060008060006080868803121561463157600080fd5b85359450602086013567ffffffffffffffff81111561464f57600080fd5b61465b888289016145cd565b9699909850959660408101359660609091013595509350505050565b803560ff8116811461468857600080fd5b919050565b6000806000606084860312156146a257600080fd5b83359250602084013591506146b960408501614677565b90509250925092565b6000602082840312156146d457600080fd5b5035919050565b600081518084526020808501945080840160005b838110156147145781516001600160a01b0316875295820195908201906001016146ef565b509495945050505050565b600081518084526020808501945080840160005b8381101561471457815187529582019590820190600101614733565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a082015260a082015160c082015260c082015160e0820152600060e08301516101006147b4818501836001600160a01b03169052565b808501519150506101c061012081818601526147d46101e08601846146db565b9250808601519050601f196101408187860301818801526147f5858461471f565b945080880151925050610160818786030181880152614814858461471f565b945080880151925050610180818786030181880152614833858461471f565b945080880151925050506101a061484d8187018315159052565b959095015193019290925250919050565b60008060008060006080868803121561487657600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561489b57600080fd5b6148a7888289016145cd565b96999598509660600135949350505050565b602081526000610335602083018461471f565b80356001600160a01b038116811461468857600080fd5b60008060008060008060c087890312156148fc57600080fd5b8635955060208701359450614913604088016148cc565b9350614921606088016148cc565b92506080870135915060a087013590509295509295509295565b801515811461494957600080fd5b50565b6000806000806060858703121561496257600080fd5b84359350602085013567ffffffffffffffff81111561498057600080fd5b61498c878288016145cd565b90945092505060408501356149a08161493b565b939692955090935050565b600080600080608085870312156149c157600080fd5b843593506149d160208601614677565b92506149df60408601614677565b9396929550929360600135925050565b60008060408385031215614a0257600080fd5b82359150614a12602084016148cc565b90509250929050565b60008060408385031215614a2e57600080fd5b82359150614a1260208401614677565b600080600080600060a08688031215614a5657600080fd5b8535945060208601359350614a6d60408701614677565b94979396509394606081013594506080013592915050565b60008060008060008060c08789031215614a9e57600080fd5b86359550614aae60208801614677565b9450614abc60408801614677565b9350606087013592506080870135915060a087013590509295509295509295565b634e487b7160e01b600052603260045260246000fd5b602080825260129082015271696e646578206f7574206f662072616e676560701b604082015260600190565b600060208284031215614b3157600080fd5b5051919050565b6020808252600d908201526c1f2628173130b630b731b2a7b360991b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761033857610338614b75565b600082614bbf57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561033857610338614b75565b8082018082111561033857610338614b75565b608081526000614bfd608083018761471f565b8281036020840152614c0f818761471f565b604084019590955250506060015292915050565b604081526000614c36604083018561471f565b90508260208301529392505050565b6020808252600d908201526c191a5cd8589b1959081c1bdbdb609a1b604082015260600190565b600181815b80851115614ca7578160001904821115614c8d57614c8d614b75565b80851615614c9a57918102915b93841c9390800290614c71565b509250929050565b600082614cbe57506001610338565b81614ccb57506000610338565b8160018114614ce15760028114614ceb57614d07565b6001915050610338565b60ff841115614cfc57614cfc614b75565b50506001821b610338565b5060208310610133831016604e8410600b8410161715614d2a575081810a610338565b614d348383614c6c565b8060001904821115614d4857614d48614b75565b029392505050565b60006103358383614caf565b600060208284031215614d6e57600080fd5b81516103358161493b565b60005b83811015614d94578181015183820152602001614d7c565b50506000910152565b60008251614daf818460208701614d79565b9190910192915050565b6020815260008251806020840152614dd8816040850160208701614d79565b601f01601f1916919091016040019291505056fea2646970667358221220725d77713bb4ba784cabc955431b33a2caa3bf30c9144027c5286c9bedd271e364736f6c63430008110033", + "devdoc": { + "details": "Most of the logic is stored as a library `SwapUtils` for the sake of contract readability.", + "kind": "dev", + "methods": { + "addSwapLiquidity(bytes32,uint256[],uint256,uint256)": { + "params": { + "amounts": "the amounts of each token to add, in their native precision", + "deadline": "latest timestamp to accept this transaction", + "key": "Hash of the canonical id + domain", + "minToMint": "the minimum LP tokens adding this amount of liquidity should mint, otherwise revert. Handy for front-running mitigation" + }, + "returns": { + "_0": "amount of LP token user minted and received" + } + }, + "calculateRemoveSwapLiquidity(bytes32,uint256)": { + "params": { + "amount": "the amount of LP tokens that would be burned on withdrawal", + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "array of token balances that the user will receive" + } + }, + "calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)": { + "params": { + "key": "Hash of the canonical id + domain", + "tokenAmount": "the amount of LP token to burn", + "tokenIndex": "index of which token will be withdrawn" + }, + "returns": { + "availableTokenAmount": "calculated amount of underlying token available to withdraw" + } + }, + "calculateSwap(bytes32,uint8,uint8,uint256)": { + "params": { + "dx": "the amount of tokens the user wants to sell. If the token charges a fee on transfers, use the amount that gets transferred after the fee.", + "key": "Hash of the canonical id + domain", + "tokenIndexFrom": "the token the user wants to sell", + "tokenIndexTo": "the token the user wants to buy" + }, + "returns": { + "_0": "amount of tokens the user will receive" + } + }, + "calculateSwapTokenAmount(bytes32,uint256[],bool)": { + "details": "This shouldn't be used outside frontends for user estimates.", + "params": { + "amounts": "an array of token amounts to deposit or withdrawal, corresponding to pooledTokens. The amount should be in each pooled token's native precision. If a token charges a fee on transfers, use the amount that gets transferred after the fee.", + "deposit": "whether this is a deposit or a withdrawal", + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "token amount the user will receive" + } + }, + "getSwapA(bytes32)": { + "details": "See the StableSwap paper for details", + "params": { + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "A parameter" + } + }, + "getSwapAPrecise(bytes32)": { + "details": "See the StableSwap paper for details", + "params": { + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "A parameter in its raw precision form" + } + }, + "getSwapAdminBalance(bytes32,uint256)": { + "params": { + "index": "Index of the pooled token", + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "admin's token balance in the token's precision" + } + }, + "getSwapLPToken(bytes32)": { + "params": { + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "LPToken" + } + }, + "getSwapStorage(bytes32)": { + "params": { + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "SwapUtils.Swap" + } + }, + "getSwapToken(bytes32,uint8)": { + "params": { + "index": "the index of the token", + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "address of the token at given index" + } + }, + "getSwapTokenBalance(bytes32,uint8)": { + "params": { + "index": "the index of the token", + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "current balance of the pooled token at given index with token's native precision" + } + }, + "getSwapTokenIndex(bytes32,address)": { + "params": { + "key": "Hash of the canonical id + domain", + "tokenAddress": "address of the token" + }, + "returns": { + "_0": "the index of the given token address" + } + }, + "getSwapVirtualPrice(bytes32)": { + "params": { + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "the virtual price, scaled to the POOL_PRECISION_DECIMALS" + } + }, + "removeSwapLiquidity(bytes32,uint256,uint256[],uint256)": { + "details": "Liquidity can always be removed, even when the pool is paused.", + "params": { + "amount": "the amount of LP tokens to burn", + "deadline": "latest timestamp to accept this transaction", + "key": "Hash of the canonical id + domain", + "minAmounts": "the minimum amounts of each token in the pool acceptable for this burn. Useful as a front-running mitigation" + }, + "returns": { + "_0": "amounts of tokens user received" + } + }, + "removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)": { + "params": { + "amounts": "how much of each token to withdraw", + "deadline": "latest timestamp to accept this transaction", + "key": "Hash of the canonical id + domain", + "maxBurnAmount": "the max LP token provider is willing to pay to remove liquidity. Useful as a front-running mitigation." + }, + "returns": { + "_0": "amount of LP tokens burned" + } + }, + "removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)": { + "params": { + "deadline": "latest timestamp to accept this transaction", + "key": "Hash of the canonical id + domain", + "minAmount": "the minimum amount to withdraw, otherwise revert", + "tokenAmount": "the amount of the token you want to receive", + "tokenIndex": "the index of the token you want to receive" + }, + "returns": { + "_0": "amount of chosen token user received" + } + }, + "swap(bytes32,uint8,uint8,uint256,uint256,uint256)": { + "params": { + "deadline": "latest timestamp to accept this transaction", + "dx": "the amount of tokens the user wants to swap from", + "key": "Hash of the canonical id + domain", + "minDy": "the min amount the user would like to receive, or revert.", + "tokenIndexFrom": "the token the user wants to swap from", + "tokenIndexTo": "the token the user wants to swap to" + } + }, + "swapExact(bytes32,uint256,address,address,uint256,uint256)": { + "params": { + "amountIn": "the amount of tokens the user wants to swap from", + "assetIn": "the token the user wants to swap from", + "assetOut": "the token the user wants to swap to", + "key": "Hash of the canonical id + domain" + } + }, + "swapExactOut(bytes32,uint256,address,address,uint256,uint256)": { + "params": { + "amountOut": "the amount of tokens the user wants to swap to", + "assetIn": "the token the user wants to swap from", + "assetOut": "the token the user wants to swap to", + "key": "Hash of the canonical id + domain" + } + } + }, + "title": "Swap - A StableSwap implementation in solidity.", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "addSwapLiquidity(bytes32,uint256[],uint256,uint256)": { + "notice": "Add liquidity to the pool with the given amounts of tokens" + }, + "calculateRemoveSwapLiquidity(bytes32,uint256)": { + "notice": "A simple method to calculate amount of each underlying tokens that is returned upon burning given amount of LP tokens" + }, + "calculateRemoveSwapLiquidityOneToken(bytes32,uint256,uint8)": { + "notice": "Calculate the amount of underlying token available to withdraw when withdrawing via only single token" + }, + "calculateSwap(bytes32,uint8,uint8,uint256)": { + "notice": "Calculate amount of tokens you receive on swap" + }, + "calculateSwapTokenAmount(bytes32,uint256[],bool)": { + "notice": "A simple method to calculate prices from deposits or withdrawals, excluding fees but including slippage. This is helpful as an input into the various \"min\" parameters on calls to fight front-running" + }, + "getSwapA(bytes32)": { + "notice": "Return A, the amplification coefficient * n ** (n - 1)" + }, + "getSwapAPrecise(bytes32)": { + "notice": "Return A in its raw precision form" + }, + "getSwapAdminBalance(bytes32,uint256)": { + "notice": "This function reads the accumulated amount of admin fees of the token with given index" + }, + "getSwapLPToken(bytes32)": { + "notice": "Return LP token for canonical Id" + }, + "getSwapStorage(bytes32)": { + "notice": "Return Stable swap storage" + }, + "getSwapToken(bytes32,uint8)": { + "notice": "Return address of the pooled token at given index. Reverts if tokenIndex is out of range." + }, + "getSwapTokenBalance(bytes32,uint8)": { + "notice": "Return current balance of the pooled token at given index" + }, + "getSwapTokenIndex(bytes32,address)": { + "notice": "Return the index of the given token address. Reverts if no matching token is found." + }, + "getSwapVirtualPrice(bytes32)": { + "notice": "Get the virtual price, to help calculate profit" + }, + "removeSwapLiquidity(bytes32,uint256,uint256[],uint256)": { + "notice": "Burn LP tokens to remove liquidity from the pool. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply." + }, + "removeSwapLiquidityImbalance(bytes32,uint256[],uint256,uint256)": { + "notice": "Remove liquidity from the pool, weighted differently than the pool's current balances. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply." + }, + "removeSwapLiquidityOneToken(bytes32,uint256,uint8,uint256,uint256)": { + "notice": "Remove liquidity from the pool all in one token. Withdraw fee that decays linearly over period of 4 weeks since last deposit will apply." + }, + "swap(bytes32,uint8,uint8,uint256,uint256,uint256)": { + "notice": "Swap two tokens using this pool" + }, + "swapExact(bytes32,uint256,address,address,uint256,uint256)": { + "notice": "Swap two tokens using this pool" + }, + "swapExactOut(bytes32,uint256,address,address,uint256,uint256)": { + "notice": "Swap two tokens using this pool" + } + }, + "notice": "This contract is responsible for custody of closely pegged assets (eg. group of stablecoins) and automatic market making system. Users become an LP (Liquidity Provider) by depositing their tokens in desired ratios for an exchange of the pool token that represents their share of the pool. Users can burn pool tokens and withdraw their share of token(s). Each time a swap between the pooled tokens happens, a set fee incurs which effectively gets distributed to the LPs. In case of emergencies, admin can pause additional deposits, swaps, or single-asset withdraws - which stops the ratio of the tokens in the pool from changing. Users can always withdraw their tokens via multi-asset withdraws.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/StableSwapFacet.sol:StableSwapFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/SwapAdminFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/SwapAdminFacetStaging.json new file mode 100644 index 0000000000..bf2b9bbd6d --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/SwapAdminFacetStaging.json @@ -0,0 +1,1593 @@ +{ + "address": "0x273c33499f774D2C2466ef95352A7016474C43ee", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__handleOutgoingAsset_notNative", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_alreadyDisabled", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__disableSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_aExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_duplicateTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_feeExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notDisabledPool", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__removeSwap_notInitialized", + "type": "error" + }, + { + "inputs": [], + "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AdminFeesWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LPTokenTargetUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "RampAStopped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapFeesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "initialA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "initialATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureATime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "contract LPToken", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "contract IERC20[]", + "name": "pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "tokenPrecisionMultipliers", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "balances", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "adminFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "disabled", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "removeTime", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct SwapUtils.Swap", + "name": "swap", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapInitialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "SwapRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "disableSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "contract IERC20[]", + "name": "_pooledTokens", + "type": "address[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "string", + "name": "lpTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "lpTokenSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_a", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_adminFee", + "type": "uint256" + } + ], + "name": "initializeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lpTokenTargetAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "futureA", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "futureTime", + "type": "uint256" + } + ], + "name": "rampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "removeSwap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newAdminFee", + "type": "uint256" + } + ], + "name": "setSwapAdminFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "newSwapFee", + "type": "uint256" + } + ], + "name": "setSwapFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "stopRampA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "name": "updateLpTokenTarget", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + } + ], + "name": "withdrawSwapAdminFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x0be88ad81a3bb6b6937e6753e27f77654cef9559da7dde368871ea97bb69200c", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1963355", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x8b279a190f3dcc1fcdf37d316a3f1c3b898a6dfde88d990fb4a904e2de81bb9f", + "transactionHash": "0x0be88ad81a3bb6b6937e6753e27f77654cef9559da7dde368871ea97bb69200c", + "logs": [], + "blockNumber": 2894823, + "cumulativeGasUsed": "2031017", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__handleOutgoingAsset_notNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__disableSwap_alreadyDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__disableSwap_notInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_aExceedMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_adminFeeExceedMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_alreadyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_decimalsMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_duplicateTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_failedInitLpTokenClone\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_feeExceedMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_invalidPooledTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__initializeSwap_zeroTokenAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__removeSwap_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__removeSwap_notDisabledPool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__removeSwap_notInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAdminFacet__updateLpTokenTarget_invalidNewAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AdminFeesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AdminFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"LPTokenTargetUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RampAStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"RampAStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapFeesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"initialA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureATime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"contract LPToken\",\"name\":\"lpToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenPrecisionMultipliers\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"adminFees\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"removeTime\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct SwapUtils.Swap\",\"name\":\"swap\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"SwapRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"disableSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"_pooledTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint8[]\",\"name\":\"decimals\",\"type\":\"uint8[]\"},{\"internalType\":\"string\",\"name\":\"lpTokenName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"lpTokenSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_adminFee\",\"type\":\"uint256\"}],\"name\":\"initializeSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lpTokenTargetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"futureA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"futureTime\",\"type\":\"uint256\"}],\"name\":\"rampA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"removeSwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newAdminFee\",\"type\":\"uint256\"}],\"name\":\"setSwapAdminFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"setSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"stopRampA\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"updateLpTokenTarget\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"}],\"name\":\"withdrawSwapAdminFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"events\":{\"AdminFeesSet(bytes32,uint256,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\",\"newAdminFee\":\"- The updated fee\"}},\"AdminFeesWithdrawn(bytes32,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\"}},\"LPTokenTargetUpdated(address,address,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"newAddress\":\"- Updated address\",\"oldAddress\":\"- The old lpTokenTargetAddress\"}},\"RampAStarted(bytes32,uint256,uint256,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"futureA\":\"- The final A value after ramp\",\"futureTime\":\"- The time A should reach the final value\",\"key\":\"- Identifier for asset\"}},\"RampAStopped(bytes32,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\"}},\"SwapDisabled(bytes32,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\"}},\"SwapFeesSet(bytes32,uint256,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\",\"newSwapFee\":\"- The updated fee\"}},\"SwapInitialized(bytes32,(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,address,address[],uint256[],uint256[],uint256[],bool,uint256),address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\",\"swap\":\"- The swap that was initialized\"}},\"SwapRemoved(bytes32,address)\":{\"params\":{\"caller\":\"- The caller of the function\",\"key\":\"- Identifier for asset\"}}},\"kind\":\"dev\",\"methods\":{\"disableSwap(bytes32)\":{\"params\":{\"_key\":\"the hash of the canonical id and domain for token\"}},\"initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)\":{\"details\":\"The swap can only be updated after initialization via `rampA`. This means if this value is incorrectly set, it will take some time to reach the correct value.\",\"params\":{\"_a\":\"the amplification coefficient * n ** (n - 1). See the StableSwap paper for details\",\"_adminFee\":\"default adminFee to be initialized with\",\"_fee\":\"default swap fee to be initialized with\",\"_key\":\"the hash of the canonical id and domain for token\",\"_pooledTokens\":\"an array of ERC20s this pool will accept. length of this array should be in 2 ~ 16\",\"decimals\":\"the decimals to use for each pooled token, eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS(18) Only fixed decimal tokens are allowed.\",\"lpTokenName\":\"the long-form name of the token to be deployed\",\"lpTokenSymbol\":\"the short symbol for the token to be deployed\"}},\"isDisabled(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical id + domain\"},\"returns\":{\"_0\":\"disabled flag\"}},\"lpTokenTargetAddress()\":{\"returns\":{\"_0\":\"address\"}},\"rampA(bytes32,uint256,uint256)\":{\"params\":{\"futureA\":\"the new A to ramp towards\",\"futureTime\":\"timestamp when the new A should be reached\",\"key\":\"Hash of the canonical domain and id\"}},\"removeSwap(bytes32)\":{\"params\":{\"_key\":\"the hash of the canonical id and domain for token\"}},\"setSwapAdminFee(bytes32,uint256)\":{\"params\":{\"key\":\"Hash of the canonical domain and id\",\"newAdminFee\":\"new admin fee to be applied on future transactions\"}},\"setSwapFee(bytes32,uint256)\":{\"params\":{\"key\":\"Hash of the canonical domain and id\",\"newSwapFee\":\"new swap fee to be applied on future transactions\"}},\"stopRampA(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical domain and id\"}},\"updateLpTokenTarget(address)\":{\"params\":{\"newAddress\":\"New lpTokenTargetAddress\"}},\"withdrawSwapAdminFees(bytes32)\":{\"params\":{\"key\":\"Hash of the canonical domain and id\"}}},\"title\":\"SwapAdminFacet\",\"version\":1},\"userdoc\":{\"events\":{\"AdminFeesSet(bytes32,uint256,address)\":{\"notice\":\"Emitted when the owner sets admin fees\"},\"AdminFeesWithdrawn(bytes32,address)\":{\"notice\":\"Emitted when the owner withdraws admin fees\"},\"LPTokenTargetUpdated(address,address,address)\":{\"notice\":\"Emitted when the owner update lpTokenTargetAddress\"},\"RampAStarted(bytes32,uint256,uint256,address)\":{\"notice\":\"Emitted when the owner starts ramping up or down the A parameter\"},\"RampAStopped(bytes32,address)\":{\"notice\":\"Emitted when the owner stops ramping up or down the A parameter\"},\"SwapDisabled(bytes32,address)\":{\"notice\":\"Emitted when the owner calls `disableSwap`\"},\"SwapFeesSet(bytes32,uint256,address)\":{\"notice\":\"Emitted when the owner sets swap fees\"},\"SwapInitialized(bytes32,(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,address,address[],uint256[],uint256[],uint256[],bool,uint256),address)\":{\"notice\":\"Emitted when the owner calls `initializeSwap`\"},\"SwapRemoved(bytes32,address)\":{\"notice\":\"Emitted when the owner calls `removeSwap`\"}},\"kind\":\"user\",\"methods\":{\"disableSwap(bytes32)\":{\"notice\":\"disable swap for key\"},\"initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)\":{\"notice\":\"Initializes this Swap contract with the given parameters. This will also clone a LPToken contract that represents users' LP positions. The owner of LPToken will be this contract - which means only this contract is allowed to mint/burn tokens.\"},\"isDisabled(bytes32)\":{\"notice\":\"Return if the pool is disabled\"},\"lpTokenTargetAddress()\":{\"notice\":\"Returns the lp target token address\"},\"rampA(bytes32,uint256,uint256)\":{\"notice\":\"Start ramping up or down A parameter towards given futureA and futureTime Checks if the change is too rapid, and commits the new A value only when it falls under the limit range.\"},\"removeSwap(bytes32)\":{\"notice\":\"remove Swap Struct for key\"},\"setSwapAdminFee(bytes32,uint256)\":{\"notice\":\"Update the admin fee. Admin fee takes portion of the swap fee.\"},\"setSwapFee(bytes32,uint256)\":{\"notice\":\"Update the swap fee to be applied on swaps\"},\"stopRampA(bytes32)\":{\"notice\":\"Stop ramping A immediately. Reverts if ramp A is already stopped.\"},\"updateLpTokenTarget(address)\":{\"notice\":\"Update lpTokenTargetAddress\"},\"withdrawSwapAdminFees(bytes32)\":{\"notice\":\"Withdraw all admin fees to the contract owner\"}},\"notice\":\"Contract module which exposes only-admin controls for the StableSwapFacet contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/SwapAdminFacet.sol\":\"SwapAdminFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Clones.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/Clones.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\\n * deploying minimal proxy contracts, also known as \\\"clones\\\".\\n *\\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\\n *\\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\\n * deterministic method.\\n *\\n * _Available since v3.4._\\n */\\nlibrary Clones {\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create opcode, which should never revert.\\n */\\n function clone(address implementation) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\\n // of the `implementation` address with the bytecode before the address.\\n mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\\n mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n instance := create(0, 0x09, 0x37)\\n }\\n require(instance != address(0), \\\"ERC1167: create failed\\\");\\n }\\n\\n /**\\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\\n *\\n * This function uses the create2 opcode and a `salt` to deterministically deploy\\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\\n * the clones cannot be deployed twice at the same address.\\n */\\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes\\n // of the `implementation` address with the bytecode before the address.\\n mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))\\n // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.\\n mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))\\n instance := create2(0, 0x09, 0x37, salt)\\n }\\n require(instance != address(0), \\\"ERC1167: create2 failed\\\");\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(\\n address implementation,\\n bytes32 salt,\\n address deployer\\n ) internal pure returns (address predicted) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n let ptr := mload(0x40)\\n mstore(add(ptr, 0x38), deployer)\\n mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)\\n mstore(add(ptr, 0x14), implementation)\\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)\\n mstore(add(ptr, 0x58), salt)\\n mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))\\n predicted := keccak256(add(ptr, 0x43), 0x55)\\n }\\n }\\n\\n /**\\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\\n */\\n function predictDeterministicAddress(address implementation, bytes32 salt)\\n internal\\n view\\n returns (address predicted)\\n {\\n return predictDeterministicAddress(implementation, salt, address(this));\\n }\\n}\\n\",\"keccak256\":\"0x888d64d221d52c31d015b76e50ca1af5ef8ff076550810b49cea6b01d8267a10\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/SwapAdminFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20, Address, SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {Clones} from \\\"@openzeppelin/contracts/proxy/Clones.sol\\\";\\n\\nimport {AmplificationUtils, SwapUtils} from \\\"../libraries/AmplificationUtils.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\n/**\\n * @title SwapAdminFacet\\n * @notice Contract module which exposes only-admin controls for the StableSwapFacet\\n * contract.\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n */\\ncontract SwapAdminFacet is BaseConnextFacet {\\n using SafeERC20 for IERC20;\\n using SwapUtils for SwapUtils.Swap;\\n using AmplificationUtils for SwapUtils.Swap;\\n\\n // ========== Custom Errors ===========\\n error SwapAdminFacet__initializeSwap_alreadyInitialized();\\n error SwapAdminFacet__initializeSwap_invalidPooledTokens();\\n error SwapAdminFacet__initializeSwap_decimalsMismatch();\\n error SwapAdminFacet__initializeSwap_duplicateTokens();\\n error SwapAdminFacet__initializeSwap_zeroTokenAddress();\\n error SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax();\\n error SwapAdminFacet__initializeSwap_aExceedMax();\\n error SwapAdminFacet__initializeSwap_feeExceedMax();\\n error SwapAdminFacet__initializeSwap_adminFeeExceedMax();\\n error SwapAdminFacet__initializeSwap_failedInitLpTokenClone();\\n error SwapAdminFacet__updateLpTokenTarget_invalidNewAddress();\\n error SwapAdminFacet__removeSwap_notInitialized();\\n error SwapAdminFacet__removeSwap_notDisabledPool();\\n error SwapAdminFacet__removeSwap_delayNotElapsed();\\n error SwapAdminFacet__disableSwap_notInitialized();\\n error SwapAdminFacet__disableSwap_alreadyDisabled();\\n\\n // ============ Properties ============\\n\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted when the owner calls `initializeSwap`\\n * @param key - Identifier for asset\\n * @param swap - The swap that was initialized\\n * @param caller - The caller of the function\\n */\\n event SwapInitialized(bytes32 indexed key, SwapUtils.Swap swap, address caller);\\n\\n /**\\n * @notice Emitted when the owner calls `removeSwap`\\n * @param key - Identifier for asset\\n * @param caller - The caller of the function\\n */\\n event SwapRemoved(bytes32 indexed key, address caller);\\n\\n /**\\n * @notice Emitted when the owner calls `disableSwap`\\n * @param key - Identifier for asset\\n * @param caller - The caller of the function\\n */\\n event SwapDisabled(bytes32 indexed key, address caller);\\n\\n /**\\n * @notice Emitted when the owner withdraws admin fees\\n * @param key - Identifier for asset\\n * @param caller - The caller of the function\\n */\\n event AdminFeesWithdrawn(bytes32 indexed key, address caller);\\n\\n /**\\n * @notice Emitted when the owner sets admin fees\\n * @param key - Identifier for asset\\n * @param newAdminFee - The updated fee\\n * @param caller - The caller of the function\\n */\\n event AdminFeesSet(bytes32 indexed key, uint256 newAdminFee, address caller);\\n\\n /**\\n * @notice Emitted when the owner sets swap fees\\n * @param key - Identifier for asset\\n * @param newSwapFee - The updated fee\\n * @param caller - The caller of the function\\n */\\n event SwapFeesSet(bytes32 indexed key, uint256 newSwapFee, address caller);\\n\\n /**\\n * @notice Emitted when the owner starts ramping up or down the A parameter\\n * @param key - Identifier for asset\\n * @param futureA - The final A value after ramp\\n * @param futureTime - The time A should reach the final value\\n * @param caller - The caller of the function\\n */\\n event RampAStarted(bytes32 indexed key, uint256 futureA, uint256 futureTime, address caller);\\n\\n /**\\n * @notice Emitted when the owner stops ramping up or down the A parameter\\n * @param key - Identifier for asset\\n * @param caller - The caller of the function\\n */\\n event RampAStopped(bytes32 indexed key, address caller);\\n\\n /**\\n * @notice Emitted when the owner update lpTokenTargetAddress\\n * @param oldAddress - The old lpTokenTargetAddress\\n * @param newAddress - Updated address\\n * @param caller - The caller of the function\\n */\\n event LPTokenTargetUpdated(address oldAddress, address newAddress, address caller);\\n\\n // ============ External: Getters ============\\n /**\\n * @notice Returns the lp target token address\\n * @return address\\n */\\n function lpTokenTargetAddress() public view returns (address) {\\n return s.lpTokenTargetAddress;\\n }\\n\\n /**\\n * @notice Return if the pool is disabled\\n * @param key Hash of the canonical id + domain\\n * @return disabled flag\\n */\\n function isDisabled(bytes32 key) external view returns (bool) {\\n return s.swapStorages[key].disabled;\\n }\\n\\n /*** StableSwap ADMIN FUNCTIONS ***/\\n /**\\n * @notice Initializes this Swap contract with the given parameters.\\n * This will also clone a LPToken contract that represents users'\\n * LP positions. The owner of LPToken will be this contract - which means\\n * only this contract is allowed to mint/burn tokens.\\n *\\n * @dev The swap can only be updated after initialization via `rampA`. This means\\n * if this value is incorrectly set, it will take some time to reach the\\n * correct value.\\n *\\n * @param _key the hash of the canonical id and domain for token\\n * @param _pooledTokens an array of ERC20s this pool will accept.\\n * length of this array should be in 2 ~ 16\\n * @param decimals the decimals to use for each pooled token,\\n * eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS(18)\\n * Only fixed decimal tokens are allowed.\\n * @param lpTokenName the long-form name of the token to be deployed\\n * @param lpTokenSymbol the short symbol for the token to be deployed\\n * @param _a the amplification coefficient * n ** (n - 1). See the\\n * StableSwap paper for details\\n * @param _fee default swap fee to be initialized with\\n * @param _adminFee default adminFee to be initialized with\\n */\\n function initializeSwap(\\n bytes32 _key,\\n IERC20[] memory _pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 _a,\\n uint256 _fee,\\n uint256 _adminFee\\n ) external onlyOwnerOrAdmin {\\n if (s.swapStorages[_key].pooledTokens.length != 0) revert SwapAdminFacet__initializeSwap_alreadyInitialized();\\n\\n // Check _pooledTokens and precisions parameter\\n if (\\n _pooledTokens.length < Constants.MINIMUM_POOLED_TOKENS || _pooledTokens.length > Constants.MAXIMUM_POOLED_TOKENS\\n ) {\\n revert SwapAdminFacet__initializeSwap_invalidPooledTokens();\\n }\\n\\n uint256 numPooledTokens = _pooledTokens.length;\\n\\n if (numPooledTokens != decimals.length) revert SwapAdminFacet__initializeSwap_decimalsMismatch();\\n\\n uint256[] memory precisionMultipliers = new uint256[](decimals.length);\\n\\n for (uint256 i; i < numPooledTokens; ) {\\n if (i != 0) {\\n // Check if index is already used. Check if 0th element is a duplicate.\\n if (s.tokenIndexes[_key][address(_pooledTokens[i])] != 0 || _pooledTokens[0] == _pooledTokens[i])\\n revert SwapAdminFacet__initializeSwap_duplicateTokens();\\n }\\n if (address(_pooledTokens[i]) == address(0)) revert SwapAdminFacet__initializeSwap_zeroTokenAddress();\\n\\n if (decimals[i] > Constants.POOL_PRECISION_DECIMALS)\\n revert SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax();\\n\\n precisionMultipliers[i] = 10**uint256(Constants.POOL_PRECISION_DECIMALS - decimals[i]);\\n // NOTE: safe to cast to uint8 as the numPooledTokens is that type and the loop ceiling\\n s.tokenIndexes[_key][address(_pooledTokens[i])] = uint8(i);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Check _a, _fee, _adminFee, _withdrawFee parameters\\n if (_a > Constants.MAX_A - 1) revert SwapAdminFacet__initializeSwap_aExceedMax();\\n if (_fee > Constants.MAX_SWAP_FEE - 1) revert SwapAdminFacet__initializeSwap_feeExceedMax();\\n if (_adminFee > Constants.MAX_ADMIN_FEE - 1) revert SwapAdminFacet__initializeSwap_adminFeeExceedMax();\\n\\n // Initialize a LPToken contract\\n LPToken lpToken = LPToken(Clones.clone(s.lpTokenTargetAddress));\\n if (!lpToken.initialize(lpTokenName, lpTokenSymbol)) revert SwapAdminFacet__initializeSwap_failedInitLpTokenClone();\\n\\n // Initialize swapStorage struct\\n SwapUtils.Swap memory entry = SwapUtils.Swap({\\n key: _key,\\n initialA: _a * Constants.A_PRECISION,\\n futureA: _a * Constants.A_PRECISION,\\n swapFee: _fee,\\n adminFee: _adminFee,\\n lpToken: lpToken,\\n pooledTokens: _pooledTokens,\\n tokenPrecisionMultipliers: precisionMultipliers,\\n balances: new uint256[](_pooledTokens.length),\\n adminFees: new uint256[](_pooledTokens.length),\\n initialATime: 0,\\n futureATime: 0,\\n disabled: false,\\n removeTime: 0\\n });\\n s.swapStorages[_key] = entry;\\n emit SwapInitialized(_key, entry, msg.sender);\\n }\\n\\n /**\\n * @notice disable swap for key\\n *\\n * @param _key the hash of the canonical id and domain for token\\n */\\n function disableSwap(bytes32 _key) external onlyOwnerOrAdmin {\\n uint256 numPooledTokens = s.swapStorages[_key].pooledTokens.length;\\n\\n if (numPooledTokens == 0) revert SwapAdminFacet__disableSwap_notInitialized();\\n if (s.swapStorages[_key].disabled) revert SwapAdminFacet__disableSwap_alreadyDisabled();\\n\\n s.swapStorages[_key].disabled = true;\\n s.swapStorages[_key].removeTime = block.timestamp + Constants.REMOVE_DELAY;\\n\\n emit SwapDisabled(_key, msg.sender);\\n }\\n\\n /**\\n * @notice remove Swap Struct for key\\n *\\n * @param _key the hash of the canonical id and domain for token\\n */\\n function removeSwap(bytes32 _key) external onlyOwnerOrAdmin {\\n uint256 numPooledTokens = s.swapStorages[_key].pooledTokens.length;\\n if (numPooledTokens == 0) revert SwapAdminFacet__removeSwap_notInitialized();\\n\\n if (!s.swapStorages[_key].disabled) revert SwapAdminFacet__removeSwap_notDisabledPool();\\n if (s.swapStorages[_key].removeTime > block.timestamp) revert SwapAdminFacet__removeSwap_delayNotElapsed();\\n\\n for (uint256 i; i < numPooledTokens; ) {\\n IERC20 pooledToken = s.swapStorages[_key].pooledTokens[i];\\n if (s.swapStorages[_key].balances[i] > 0) {\\n // if there is not removed balance, transfer to admin wallet.\\n pooledToken.safeTransfer(msg.sender, s.swapStorages[_key].balances[i]);\\n }\\n\\n delete s.tokenIndexes[_key][address(pooledToken)];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n _withdrawAdminFees(_key, msg.sender);\\n\\n delete s.swapStorages[_key];\\n\\n emit SwapRemoved(_key, msg.sender);\\n }\\n\\n /**\\n * @notice Withdraw all admin fees to the contract owner\\n * @param key Hash of the canonical domain and id\\n */\\n function withdrawSwapAdminFees(bytes32 key) external onlyOwnerOrAdmin nonReentrant {\\n _withdrawAdminFees(key, msg.sender);\\n }\\n\\n /**\\n * @notice Withdraws all admin fees for pool at key to provided address and emits event\\n * @param _key Hash of the canonical domain and id\\n * @param _to Recipient of fees\\n */\\n function _withdrawAdminFees(bytes32 _key, address _to) internal {\\n s.swapStorages[_key].withdrawAdminFees(_to);\\n emit AdminFeesWithdrawn(_key, _to);\\n }\\n\\n /**\\n * @notice Update the admin fee. Admin fee takes portion of the swap fee.\\n * @param key Hash of the canonical domain and id\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setSwapAdminFee(bytes32 key, uint256 newAdminFee) external onlyOwnerOrAdmin {\\n s.swapStorages[key].setAdminFee(newAdminFee);\\n emit AdminFeesSet(key, newAdminFee, msg.sender);\\n }\\n\\n /**\\n * @notice Update the swap fee to be applied on swaps\\n * @param key Hash of the canonical domain and id\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(bytes32 key, uint256 newSwapFee) external onlyOwnerOrAdmin {\\n s.swapStorages[key].setSwapFee(newSwapFee);\\n emit SwapFeesSet(key, newSwapFee, msg.sender);\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA and futureTime\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param key Hash of the canonical domain and id\\n * @param futureA the new A to ramp towards\\n * @param futureTime timestamp when the new A should be reached\\n */\\n function rampA(\\n bytes32 key,\\n uint256 futureA,\\n uint256 futureTime\\n ) external onlyOwnerOrAdmin {\\n s.swapStorages[key].rampA(futureA, futureTime);\\n emit RampAStarted(key, futureA, futureTime, msg.sender);\\n }\\n\\n /**\\n * @notice Stop ramping A immediately. Reverts if ramp A is already stopped.\\n * @param key Hash of the canonical domain and id\\n */\\n function stopRampA(bytes32 key) external onlyOwnerOrAdmin {\\n s.swapStorages[key].stopRampA();\\n emit RampAStopped(key, msg.sender);\\n }\\n\\n /**\\n * @notice Update lpTokenTargetAddress\\n * @param newAddress New lpTokenTargetAddress\\n */\\n function updateLpTokenTarget(address newAddress) external onlyOwnerOrAdmin {\\n if (!Address.isContract(newAddress)) revert SwapAdminFacet__updateLpTokenTarget_invalidNewAddress();\\n emit LPTokenTargetUpdated(s.lpTokenTargetAddress, newAddress, msg.sender);\\n s.lpTokenTargetAddress = newAddress;\\n }\\n}\\n\",\"keccak256\":\"0xd869a156caef1a6a17918a5bd93f4cf945b227b436751db262faba4bb956ac58\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50612279806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806372a30e081161007157806372a30e081461013f5780638dc51484146101525780639c8eab9714610165578063a1a23c2914610178578063e5f6220f1461018b578063ea027c2f1461019e57600080fd5b80631963e426146100ae5780632bf63bcc146100c35780633e74aea0146100e357806343be5eaf146100f65780634b141bb414610109575b600080fd5b6100c16100bc366004611b2a565b6101b1565b005b601a546040516001600160a01b0390911681526020015b60405180910390f35b6100c16100f1366004611b56565b610273565b6100c1610104366004611b6f565b610546565b61012f610117366004611b56565b6000908152601860205260409020600c015460ff1690565b60405190151581526020016100da565b6100c161014d366004611b56565b6105f7565b6100c1610160366004611ba6565b6106a8565b6100c1610173366004611b6f565b6107a0565b6100c1610186366004611b56565b610851565b6100c1610199366004611d7d565b6108ee565b6100c16101ac366004611b56565b610fc4565b336101ba6110fc565b6001600160a01b0316141580156101f5575060033360009081526014602052604090205460ff1660038111156101f2576101f2611e4f565b14155b1561021357604051637b32c26b60e01b815260040160405180910390fd5b600083815260186020526040902061022c90838361112a565b60408051838152602081018390523381830152905184917f58e6fbecdb1a94225cf82c6b317a771aa08c9ab6552702b819bcd84ba8e8312f919081900360600190a2505050565b3361027c6110fc565b6001600160a01b0316141580156102b7575060033360009081526014602052604090205460ff1660038111156102b4576102b4611e4f565b14155b156102d557604051637b32c26b60e01b815260040160405180910390fd5b6000818152601860205260408120600801549081900361030857604051635e98c38d60e11b815260040160405180910390fd5b6000828152601860205260409020600c015460ff1661033a57604051637baf490160e11b815260040160405180910390fd5b6000828152601860205260409020600d015442101561036c576040516302aba83160e51b815260040160405180910390fd5b60005b8181101561046757600083815260186020526040812060080180548390811061039a5761039a611e65565b6000918252602080832090910154868352601890915260408220600a0180546001600160a01b03909216935090849081106103d7576103d7611e65565b90600052602060002001541115610435576000848152601860205260409020600a0180546104359133918590811061041157610411611e65565b9060005260206000200154836001600160a01b03166113b89092919063ffffffff16565b60008481526019602090815260408083206001600160a01b03909416835292905220805460ff1916905560010161036f565b50610472823361140f565b60008281526018602052604081208181556001810182905560028101829055600381018290556004810182905560058101829055600681018290556007810180546001600160a01b0319169055906104cd6008830182611a54565b6104db600983016000611a54565b6104e9600a83016000611a54565b6104f7600b83016000611a54565b50600c8101805460ff191690556000600d9091015560405133815282907fb729dde7e954c83f790a153521f9d2e12779b36305ed42c8bf86ac4cf7ce6915906020015b60405180910390a25050565b3361054f6110fc565b6001600160a01b03161415801561058a575060033360009081526014602052604090205460ff16600381111561058757610587611e4f565b14155b156105a857604051637b32c26b60e01b815260040160405180910390fd5b60008281526018602052604090206105c09082611462565b6040805182815233602082015283917f6d9b91502dc11e7c127e8e2d114c1f8026647ecb6b987c1baaadb706b5eb3176910161053a565b336106006110fc565b6001600160a01b03161415801561063b575060033360009081526014602052604090205460ff16600381111561063857610638611e4f565b14155b1561065957604051637b32c26b60e01b815260040160405180910390fd5b6000818152601860205260409020610670906114e3565b60405133815281907f86ce75679135e270f845c02bcb49ef6fb50464cb322dcc30096cccd13d2597df9060200160405180910390a250565b336106b16110fc565b6001600160a01b0316141580156106ec575060033360009081526014602052604090205460ff1660038111156106e9576106e9611e4f565b14155b1561070a57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381163b61073257604051630db340a960e21b815260040160405180910390fd5b601a54604080516001600160a01b03928316815291831660208301523382820152517f98bc4f3f4ec7b43d0c86b6136979bfbe279b2d54a930505d34ec02d72dfb1c409181900360600190a1601a80546001600160a01b0319166001600160a01b0392909216919091179055565b336107a96110fc565b6001600160a01b0316141580156107e4575060033360009081526014602052604090205460ff1660038111156107e1576107e1611e4f565b14155b1561080257604051637b32c26b60e01b815260040160405180910390fd5b600082815260186020526040902061081a90826115a4565b6040805182815233602082015283917f46eefbb271e4103912d3c227656de8afc0849f4c8cba4b2a1e38b660361e0463910161053a565b3361085a6110fc565b6001600160a01b031614158015610895575060033360009081526014602052604090205460ff16600381111561089257610892611e4f565b14155b156108b357604051637b32c26b60e01b815260040160405180910390fd5b601654600119016108d757604051637ce54e2d60e11b815260040160405180910390fd5b60026016556108e6813361140f565b506001601655565b336108f76110fc565b6001600160a01b031614158015610932575060033360009081526014602052604090205460ff16600381111561092f5761092f611e4f565b14155b1561095057604051637b32c26b60e01b815260040160405180910390fd5b60008881526018602052604090206008015415610980576040516376a1368960e11b815260040160405180910390fd5b600287511080610991575060108751115b156109af5760405163502ef3af60e01b815260040160405180910390fd5b8651865181146109d25760405163d6e48e5d60e01b815260040160405180910390fd5b6000875167ffffffffffffffff8111156109ee576109ee611bc3565b604051908082528060200260200182016040528015610a17578160200160208202803683370190505b50905060005b82811015610c2d578015610ae65760008b81526019602052604081208b519091908c9084908110610a5057610a50611e65565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16151580610ac85750898181518110610a9157610a91611e65565b60200260200101516001600160a01b03168a600081518110610ab557610ab5611e65565b60200260200101516001600160a01b0316145b15610ae657604051632fa9e93b60e11b815260040160405180910390fd5b60006001600160a01b03168a8281518110610b0357610b03611e65565b60200260200101516001600160a01b031603610b3257604051634ce187ad60e11b815260040160405180910390fd5b601260ff16898281518110610b4957610b49611e65565b602002602001015160ff161115610b7357604051637d4ada4560e11b815260040160405180910390fd5b888181518110610b8557610b85611e65565b60200260200101516012610b999190611e91565b610ba79060ff16600a611f94565b828281518110610bb957610bb9611e65565b60200260200101818152505080600060190160008d815260200190815260200160002060008c8481518110610bf057610bf0611e65565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191660ff92909216919091179055600101610a1d565b50610c3c6001620f4240611fa0565b851115610c5c576040516306aedbfd60e01b815260040160405180910390fd5b610c6b60016305f5e100611fa0565b841115610c8b57604051634fc2217d60e11b815260040160405180910390fd5b610c9b60016402540be400611fa0565b831115610cbb576040516384b9a37f60e01b815260040160405180910390fd5b601a54600090610cd3906001600160a01b0316611626565b60405163266c45bb60e11b81529091506001600160a01b03821690634cd88b7690610d04908b908b90600401612003565b6020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190612031565b610d645760405163276cd8b960e01b815260040160405180910390fd5b6000604051806101c001604052808d8152602001606489610d859190612053565b8152602001610d9560648a612053565b81526020016000815260200160008152602001878152602001868152602001836001600160a01b031681526020018c81526020018481526020018c5167ffffffffffffffff811115610de957610de9611bc3565b604051908082528060200260200182016040528015610e12578160200160208202803683370190505b5081526020018c5167ffffffffffffffff811115610e3257610e32611bc3565b604051908082528060200260200182016040528015610e5b578160200160208202803683370190505b5081526000602080830182905260409283018290528f8252601881529082902083518155838201516001820155918301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151600683015560e08301516007830180546001600160a01b0319166001600160a01b0390921691909117905561010083015180519394508493610efc9260088501920190611a75565b506101208201518051610f19916009840191602090910190611ada565b506101408201518051610f3691600a840191602090910190611ada565b506101608201518051610f5391600b840191602090910190611ada565b50610180820151600c8201805460ff19169115159190911790556101a090910151600d909101556040518c907f17624207b3ada0ecb82d25bef7eb308a62e614001936961428b08af45651c3f190610fae90849033906120de565b60405180910390a2505050505050505050505050565b33610fcd6110fc565b6001600160a01b031614158015611008575060033360009081526014602052604090205460ff16600381111561100557611005611e4f565b14155b1561102657604051637b32c26b60e01b815260040160405180910390fd5b60008181526018602052604081206008015490819003611059576040516303bb6f8760e61b815260040160405180910390fd5b6000828152601860205260409020600c015460ff161561108c576040516380cd476f60e01b815260040160405180910390fd5b6000828152601860205260409020600c01805460ff191660011790556110b562093a8042612201565b600083815260186020908152604091829020600d01929092555133815283917f436f3434791c806271347887826cd8df45595907e6cfdc188dd8c9b468d8521e910161053a565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b62015180836003015461113d9190612201565b4210156111915760405162461bcd60e51b815260206004820152601f60248201527f57616974203120646179206265666f7265207374617274696e672072616d700060448201526064015b60405180910390fd5b61119e6212750042612201565b8110156111e65760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e742072616d702074696d6560501b6044820152606401611188565b81158015906111f75750620f424082105b6112435760405162461bcd60e51b815260206004820181905260248201527f667574757265415f206d757374206265203e203020616e64203c204d41585f416044820152606401611188565b600061124e846116c0565b9050600061125d606485612053565b905080820361129c5760405162461bcd60e51b815260206004820152600b60248201526a02176616c69642072616d760ac1b6044820152606401611188565b818110156112fb57816112b0600283612053565b10156112f65760405162461bcd60e51b8152602060048201526015602482015274199d5d1d5c995057c81a5cc81d1bdbc81cdb585b1b605a1b6044820152606401611188565b61134d565b611306600283612053565b81111561134d5760405162461bcd60e51b8152602060048201526015602482015274667574757265415f20697320746f6f206c6172676560581b6044820152606401611188565b600185018290556002850181905542600386018190556004860184905560408051848152602081018490528082019290925260608201859052517fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c2549181900360800190a15050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261140a908490611709565b505050565b600082815260186020526040902061142790826117db565b6040516001600160a01b038216815282907f2e6c35653408399a9853c5e5f81b67018cba78568bfd76dd46f93c825cbfb95d9060200161053a565b6114716305f5e1006001612201565b81106114aa5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611188565b6005820181905581546040518281527f29aee3d14d18e1b8ace81481838ab2996fee9446a44336847d1d5c7fdf2471b19060200161053a565b428160040154116115365760405162461bcd60e51b815260206004820152601760248201527f52616d7020697320616c72656164792073746f707065640000000000000000006044820152606401611188565b6000611541826116c0565b60018301819055600283018190554260038401819055600484018190556040519192507f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc2019389161159891848252602082015260400190565b60405180910390a15050565b6115b46402540be4006001612201565b81106115ed5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611188565b6006820181905581546040518281527f7b4e02f2e320870ba4f764edf60a5289a465018a3fe159f0d72ba33139b0a6169060200161053a565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166116bb5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401611188565b919050565b6004810154600282015460018301549091908083148015906116e157508142105b15611702576000846003015490508083038142038502428503840201049350505b5050919050565b600061175e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118819092919063ffffffff16565b80519091501561140a578080602001905181019061177c9190612031565b61140a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611188565b600882015460005b8181101561187b57600084600801828154811061180257611802611e65565b6000918252602082200154600b870180546001600160a01b039092169350908490811061183157611831611e65565b90600052602060002001549050806000146118715785600b01838154811061185b5761185b611e65565b600091825260208220015561187182868361189a565b50506001016117e3565b50505050565b606061189084846000856118d9565b90505b9392505050565b806000036118a757505050565b6001600160a01b0383166118ce57604051633a48ca7b60e11b815260040160405180910390fd5b61140a8383836113b8565b60608247101561193a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611188565b600080866001600160a01b031685876040516119569190612214565b60006040518083038185875af1925050503d8060008114611993576040519150601f19603f3d011682016040523d82523d6000602084013e611998565b606091505b50915091506119a9878383876119b6565b925050505b949350505050565b60608315611a25578251600003611a1e576001600160a01b0385163b611a1e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611188565b50816119ae565b6119ae8383815115611a3a5781518083602001fd5b8060405162461bcd60e51b81526004016111889190612230565b5080546000825590600052602060002090810190611a729190611b15565b50565b828054828255906000526020600020908101928215611aca579160200282015b82811115611aca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611a95565b50611ad6929150611b15565b5090565b828054828255906000526020600020908101928215611aca579160200282015b82811115611aca578251825591602001919060010190611afa565b5b80821115611ad65760008155600101611b16565b600080600060608486031215611b3f57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611b6857600080fd5b5035919050565b60008060408385031215611b8257600080fd5b50508035926020909101359150565b6001600160a01b0381168114611a7257600080fd5b600060208284031215611bb857600080fd5b813561189381611b91565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c0257611c02611bc3565b604052919050565b600067ffffffffffffffff821115611c2457611c24611bc3565b5060051b60200190565b600082601f830112611c3f57600080fd5b81356020611c54611c4f83611c0a565b611bd9565b82815260059290921b84018101918181019086841115611c7357600080fd5b8286015b84811015611c97578035611c8a81611b91565b8352918301918301611c77565b509695505050505050565b600082601f830112611cb357600080fd5b81356020611cc3611c4f83611c0a565b82815260059290921b84018101918181019086841115611ce257600080fd5b8286015b84811015611c9757803560ff81168114611d005760008081fd5b8352918301918301611ce6565b600082601f830112611d1e57600080fd5b813567ffffffffffffffff811115611d3857611d38611bc3565b611d4b601f8201601f1916602001611bd9565b818152846020838601011115611d6057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215611d9a57600080fd5b88359750602089013567ffffffffffffffff80821115611db957600080fd5b611dc58c838d01611c2e565b985060408b0135915080821115611ddb57600080fd5b611de78c838d01611ca2565b975060608b0135915080821115611dfd57600080fd5b611e098c838d01611d0d565b965060808b0135915080821115611e1f57600080fd5b50611e2c8b828c01611d0d565b989b979a50959894979660a0860135965060c08601359560e00135945092505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611eaa57611eaa611e7b565b92915050565b600181815b80851115611eeb578160001904821115611ed157611ed1611e7b565b80851615611ede57918102915b93841c9390800290611eb5565b509250929050565b600082611f0257506001611eaa565b81611f0f57506000611eaa565b8160018114611f255760028114611f2f57611f4b565b6001915050611eaa565b60ff841115611f4057611f40611e7b565b50506001821b611eaa565b5060208310610133831016604e8410600b8410161715611f6e575081810a611eaa565b611f788383611eb0565b8060001904821115611f8c57611f8c611e7b565b029392505050565b60006118938383611ef3565b81810381811115611eaa57611eaa611e7b565b60005b83811015611fce578181015183820152602001611fb6565b50506000910152565b60008151808452611fef816020860160208601611fb3565b601f01601f19169290920160200192915050565b6040815260006120166040830185611fd7565b82810360208401526120288185611fd7565b95945050505050565b60006020828403121561204357600080fd5b8151801515811461189357600080fd5b8082028115828204841417611eaa57611eaa611e7b565b600081518084526020808501945080840160005b838110156120a35781516001600160a01b03168752958201959082019060010161207e565b509495945050505050565b600081518084526020808501945080840160005b838110156120a3578151875295820195908201906001016120c2565b60408152825160408201526020830151606082015260408301516080820152606083015160a0820152608083015160c082015260a083015160e0820152600060c0840151610100818185015260e08601519150610120612148818601846001600160a01b03169052565b8187015192506101c09150610140828187015261216961020087018561206a565b9350818801519150603f1961016081888703018189015261218a86856120ae565b9550828a0151935061018092508188870301838901526121aa86856120ae565b9550808a01519350506101a08188870301818901526121c986856120ae565b9550828a015193506121de8589018515159052565b8901516101e08801525050506001600160a01b0385166020850152509050611893565b80820180821115611eaa57611eaa611e7b565b60008251612226818460208701611fb3565b9190910192915050565b6020815260006118936020830184611fd756fea26469706673582212207f9c21399ca4ba437f3a9e57d50efbda87d7960f2d1e74dd3783db24c665d2e864736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806372a30e081161007157806372a30e081461013f5780638dc51484146101525780639c8eab9714610165578063a1a23c2914610178578063e5f6220f1461018b578063ea027c2f1461019e57600080fd5b80631963e426146100ae5780632bf63bcc146100c35780633e74aea0146100e357806343be5eaf146100f65780634b141bb414610109575b600080fd5b6100c16100bc366004611b2a565b6101b1565b005b601a546040516001600160a01b0390911681526020015b60405180910390f35b6100c16100f1366004611b56565b610273565b6100c1610104366004611b6f565b610546565b61012f610117366004611b56565b6000908152601860205260409020600c015460ff1690565b60405190151581526020016100da565b6100c161014d366004611b56565b6105f7565b6100c1610160366004611ba6565b6106a8565b6100c1610173366004611b6f565b6107a0565b6100c1610186366004611b56565b610851565b6100c1610199366004611d7d565b6108ee565b6100c16101ac366004611b56565b610fc4565b336101ba6110fc565b6001600160a01b0316141580156101f5575060033360009081526014602052604090205460ff1660038111156101f2576101f2611e4f565b14155b1561021357604051637b32c26b60e01b815260040160405180910390fd5b600083815260186020526040902061022c90838361112a565b60408051838152602081018390523381830152905184917f58e6fbecdb1a94225cf82c6b317a771aa08c9ab6552702b819bcd84ba8e8312f919081900360600190a2505050565b3361027c6110fc565b6001600160a01b0316141580156102b7575060033360009081526014602052604090205460ff1660038111156102b4576102b4611e4f565b14155b156102d557604051637b32c26b60e01b815260040160405180910390fd5b6000818152601860205260408120600801549081900361030857604051635e98c38d60e11b815260040160405180910390fd5b6000828152601860205260409020600c015460ff1661033a57604051637baf490160e11b815260040160405180910390fd5b6000828152601860205260409020600d015442101561036c576040516302aba83160e51b815260040160405180910390fd5b60005b8181101561046757600083815260186020526040812060080180548390811061039a5761039a611e65565b6000918252602080832090910154868352601890915260408220600a0180546001600160a01b03909216935090849081106103d7576103d7611e65565b90600052602060002001541115610435576000848152601860205260409020600a0180546104359133918590811061041157610411611e65565b9060005260206000200154836001600160a01b03166113b89092919063ffffffff16565b60008481526019602090815260408083206001600160a01b03909416835292905220805460ff1916905560010161036f565b50610472823361140f565b60008281526018602052604081208181556001810182905560028101829055600381018290556004810182905560058101829055600681018290556007810180546001600160a01b0319169055906104cd6008830182611a54565b6104db600983016000611a54565b6104e9600a83016000611a54565b6104f7600b83016000611a54565b50600c8101805460ff191690556000600d9091015560405133815282907fb729dde7e954c83f790a153521f9d2e12779b36305ed42c8bf86ac4cf7ce6915906020015b60405180910390a25050565b3361054f6110fc565b6001600160a01b03161415801561058a575060033360009081526014602052604090205460ff16600381111561058757610587611e4f565b14155b156105a857604051637b32c26b60e01b815260040160405180910390fd5b60008281526018602052604090206105c09082611462565b6040805182815233602082015283917f6d9b91502dc11e7c127e8e2d114c1f8026647ecb6b987c1baaadb706b5eb3176910161053a565b336106006110fc565b6001600160a01b03161415801561063b575060033360009081526014602052604090205460ff16600381111561063857610638611e4f565b14155b1561065957604051637b32c26b60e01b815260040160405180910390fd5b6000818152601860205260409020610670906114e3565b60405133815281907f86ce75679135e270f845c02bcb49ef6fb50464cb322dcc30096cccd13d2597df9060200160405180910390a250565b336106b16110fc565b6001600160a01b0316141580156106ec575060033360009081526014602052604090205460ff1660038111156106e9576106e9611e4f565b14155b1561070a57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381163b61073257604051630db340a960e21b815260040160405180910390fd5b601a54604080516001600160a01b03928316815291831660208301523382820152517f98bc4f3f4ec7b43d0c86b6136979bfbe279b2d54a930505d34ec02d72dfb1c409181900360600190a1601a80546001600160a01b0319166001600160a01b0392909216919091179055565b336107a96110fc565b6001600160a01b0316141580156107e4575060033360009081526014602052604090205460ff1660038111156107e1576107e1611e4f565b14155b1561080257604051637b32c26b60e01b815260040160405180910390fd5b600082815260186020526040902061081a90826115a4565b6040805182815233602082015283917f46eefbb271e4103912d3c227656de8afc0849f4c8cba4b2a1e38b660361e0463910161053a565b3361085a6110fc565b6001600160a01b031614158015610895575060033360009081526014602052604090205460ff16600381111561089257610892611e4f565b14155b156108b357604051637b32c26b60e01b815260040160405180910390fd5b601654600119016108d757604051637ce54e2d60e11b815260040160405180910390fd5b60026016556108e6813361140f565b506001601655565b336108f76110fc565b6001600160a01b031614158015610932575060033360009081526014602052604090205460ff16600381111561092f5761092f611e4f565b14155b1561095057604051637b32c26b60e01b815260040160405180910390fd5b60008881526018602052604090206008015415610980576040516376a1368960e11b815260040160405180910390fd5b600287511080610991575060108751115b156109af5760405163502ef3af60e01b815260040160405180910390fd5b8651865181146109d25760405163d6e48e5d60e01b815260040160405180910390fd5b6000875167ffffffffffffffff8111156109ee576109ee611bc3565b604051908082528060200260200182016040528015610a17578160200160208202803683370190505b50905060005b82811015610c2d578015610ae65760008b81526019602052604081208b519091908c9084908110610a5057610a50611e65565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16151580610ac85750898181518110610a9157610a91611e65565b60200260200101516001600160a01b03168a600081518110610ab557610ab5611e65565b60200260200101516001600160a01b0316145b15610ae657604051632fa9e93b60e11b815260040160405180910390fd5b60006001600160a01b03168a8281518110610b0357610b03611e65565b60200260200101516001600160a01b031603610b3257604051634ce187ad60e11b815260040160405180910390fd5b601260ff16898281518110610b4957610b49611e65565b602002602001015160ff161115610b7357604051637d4ada4560e11b815260040160405180910390fd5b888181518110610b8557610b85611e65565b60200260200101516012610b999190611e91565b610ba79060ff16600a611f94565b828281518110610bb957610bb9611e65565b60200260200101818152505080600060190160008d815260200190815260200160002060008c8481518110610bf057610bf0611e65565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191660ff92909216919091179055600101610a1d565b50610c3c6001620f4240611fa0565b851115610c5c576040516306aedbfd60e01b815260040160405180910390fd5b610c6b60016305f5e100611fa0565b841115610c8b57604051634fc2217d60e11b815260040160405180910390fd5b610c9b60016402540be400611fa0565b831115610cbb576040516384b9a37f60e01b815260040160405180910390fd5b601a54600090610cd3906001600160a01b0316611626565b60405163266c45bb60e11b81529091506001600160a01b03821690634cd88b7690610d04908b908b90600401612003565b6020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190612031565b610d645760405163276cd8b960e01b815260040160405180910390fd5b6000604051806101c001604052808d8152602001606489610d859190612053565b8152602001610d9560648a612053565b81526020016000815260200160008152602001878152602001868152602001836001600160a01b031681526020018c81526020018481526020018c5167ffffffffffffffff811115610de957610de9611bc3565b604051908082528060200260200182016040528015610e12578160200160208202803683370190505b5081526020018c5167ffffffffffffffff811115610e3257610e32611bc3565b604051908082528060200260200182016040528015610e5b578160200160208202803683370190505b5081526000602080830182905260409283018290528f8252601881529082902083518155838201516001820155918301516002830155606083015160038301556080830151600483015560a0830151600583015560c0830151600683015560e08301516007830180546001600160a01b0319166001600160a01b0390921691909117905561010083015180519394508493610efc9260088501920190611a75565b506101208201518051610f19916009840191602090910190611ada565b506101408201518051610f3691600a840191602090910190611ada565b506101608201518051610f5391600b840191602090910190611ada565b50610180820151600c8201805460ff19169115159190911790556101a090910151600d909101556040518c907f17624207b3ada0ecb82d25bef7eb308a62e614001936961428b08af45651c3f190610fae90849033906120de565b60405180910390a2505050505050505050505050565b33610fcd6110fc565b6001600160a01b031614158015611008575060033360009081526014602052604090205460ff16600381111561100557611005611e4f565b14155b1561102657604051637b32c26b60e01b815260040160405180910390fd5b60008181526018602052604081206008015490819003611059576040516303bb6f8760e61b815260040160405180910390fd5b6000828152601860205260409020600c015460ff161561108c576040516380cd476f60e01b815260040160405180910390fd5b6000828152601860205260409020600c01805460ff191660011790556110b562093a8042612201565b600083815260186020908152604091829020600d01929092555133815283917f436f3434791c806271347887826cd8df45595907e6cfdc188dd8c9b468d8521e910161053a565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b62015180836003015461113d9190612201565b4210156111915760405162461bcd60e51b815260206004820152601f60248201527f57616974203120646179206265666f7265207374617274696e672072616d700060448201526064015b60405180910390fd5b61119e6212750042612201565b8110156111e65760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e742072616d702074696d6560501b6044820152606401611188565b81158015906111f75750620f424082105b6112435760405162461bcd60e51b815260206004820181905260248201527f667574757265415f206d757374206265203e203020616e64203c204d41585f416044820152606401611188565b600061124e846116c0565b9050600061125d606485612053565b905080820361129c5760405162461bcd60e51b815260206004820152600b60248201526a02176616c69642072616d760ac1b6044820152606401611188565b818110156112fb57816112b0600283612053565b10156112f65760405162461bcd60e51b8152602060048201526015602482015274199d5d1d5c995057c81a5cc81d1bdbc81cdb585b1b605a1b6044820152606401611188565b61134d565b611306600283612053565b81111561134d5760405162461bcd60e51b8152602060048201526015602482015274667574757265415f20697320746f6f206c6172676560581b6044820152606401611188565b600185018290556002850181905542600386018190556004860184905560408051848152602081018490528082019290925260608201859052517fa2b71ec6df949300b59aab36b55e189697b750119dd349fcfa8c0f779e83c2549181900360800190a15050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261140a908490611709565b505050565b600082815260186020526040902061142790826117db565b6040516001600160a01b038216815282907f2e6c35653408399a9853c5e5f81b67018cba78568bfd76dd46f93c825cbfb95d9060200161053a565b6114716305f5e1006001612201565b81106114aa5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611188565b6005820181905581546040518281527f29aee3d14d18e1b8ace81481838ab2996fee9446a44336847d1d5c7fdf2471b19060200161053a565b428160040154116115365760405162461bcd60e51b815260206004820152601760248201527f52616d7020697320616c72656164792073746f707065640000000000000000006044820152606401611188565b6000611541826116c0565b60018301819055600283018190554260038401819055600484018190556040519192507f46e22fb3709ad289f62ce63d469248536dbc78d82b84a3d7e74ad606dc2019389161159891848252602082015260400190565b60405180910390a15050565b6115b46402540be4006001612201565b81106115ed5760405162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b6044820152606401611188565b6006820181905581546040518281527f7b4e02f2e320870ba4f764edf60a5289a465018a3fe159f0d72ba33139b0a6169060200161053a565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166116bb5760405162461bcd60e51b8152602060048201526016602482015275115490cc4c4d8dce8818dc99585d194819985a5b195960521b6044820152606401611188565b919050565b6004810154600282015460018301549091908083148015906116e157508142105b15611702576000846003015490508083038142038502428503840201049350505b5050919050565b600061175e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118819092919063ffffffff16565b80519091501561140a578080602001905181019061177c9190612031565b61140a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611188565b600882015460005b8181101561187b57600084600801828154811061180257611802611e65565b6000918252602082200154600b870180546001600160a01b039092169350908490811061183157611831611e65565b90600052602060002001549050806000146118715785600b01838154811061185b5761185b611e65565b600091825260208220015561187182868361189a565b50506001016117e3565b50505050565b606061189084846000856118d9565b90505b9392505050565b806000036118a757505050565b6001600160a01b0383166118ce57604051633a48ca7b60e11b815260040160405180910390fd5b61140a8383836113b8565b60608247101561193a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611188565b600080866001600160a01b031685876040516119569190612214565b60006040518083038185875af1925050503d8060008114611993576040519150601f19603f3d011682016040523d82523d6000602084013e611998565b606091505b50915091506119a9878383876119b6565b925050505b949350505050565b60608315611a25578251600003611a1e576001600160a01b0385163b611a1e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611188565b50816119ae565b6119ae8383815115611a3a5781518083602001fd5b8060405162461bcd60e51b81526004016111889190612230565b5080546000825590600052602060002090810190611a729190611b15565b50565b828054828255906000526020600020908101928215611aca579160200282015b82811115611aca57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611a95565b50611ad6929150611b15565b5090565b828054828255906000526020600020908101928215611aca579160200282015b82811115611aca578251825591602001919060010190611afa565b5b80821115611ad65760008155600101611b16565b600080600060608486031215611b3f57600080fd5b505081359360208301359350604090920135919050565b600060208284031215611b6857600080fd5b5035919050565b60008060408385031215611b8257600080fd5b50508035926020909101359150565b6001600160a01b0381168114611a7257600080fd5b600060208284031215611bb857600080fd5b813561189381611b91565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611c0257611c02611bc3565b604052919050565b600067ffffffffffffffff821115611c2457611c24611bc3565b5060051b60200190565b600082601f830112611c3f57600080fd5b81356020611c54611c4f83611c0a565b611bd9565b82815260059290921b84018101918181019086841115611c7357600080fd5b8286015b84811015611c97578035611c8a81611b91565b8352918301918301611c77565b509695505050505050565b600082601f830112611cb357600080fd5b81356020611cc3611c4f83611c0a565b82815260059290921b84018101918181019086841115611ce257600080fd5b8286015b84811015611c9757803560ff81168114611d005760008081fd5b8352918301918301611ce6565b600082601f830112611d1e57600080fd5b813567ffffffffffffffff811115611d3857611d38611bc3565b611d4b601f8201601f1916602001611bd9565b818152846020838601011115611d6057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215611d9a57600080fd5b88359750602089013567ffffffffffffffff80821115611db957600080fd5b611dc58c838d01611c2e565b985060408b0135915080821115611ddb57600080fd5b611de78c838d01611ca2565b975060608b0135915080821115611dfd57600080fd5b611e098c838d01611d0d565b965060808b0135915080821115611e1f57600080fd5b50611e2c8b828c01611d0d565b989b979a50959894979660a0860135965060c08601359560e00135945092505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff8281168282160390811115611eaa57611eaa611e7b565b92915050565b600181815b80851115611eeb578160001904821115611ed157611ed1611e7b565b80851615611ede57918102915b93841c9390800290611eb5565b509250929050565b600082611f0257506001611eaa565b81611f0f57506000611eaa565b8160018114611f255760028114611f2f57611f4b565b6001915050611eaa565b60ff841115611f4057611f40611e7b565b50506001821b611eaa565b5060208310610133831016604e8410600b8410161715611f6e575081810a611eaa565b611f788383611eb0565b8060001904821115611f8c57611f8c611e7b565b029392505050565b60006118938383611ef3565b81810381811115611eaa57611eaa611e7b565b60005b83811015611fce578181015183820152602001611fb6565b50506000910152565b60008151808452611fef816020860160208601611fb3565b601f01601f19169290920160200192915050565b6040815260006120166040830185611fd7565b82810360208401526120288185611fd7565b95945050505050565b60006020828403121561204357600080fd5b8151801515811461189357600080fd5b8082028115828204841417611eaa57611eaa611e7b565b600081518084526020808501945080840160005b838110156120a35781516001600160a01b03168752958201959082019060010161207e565b509495945050505050565b600081518084526020808501945080840160005b838110156120a3578151875295820195908201906001016120c2565b60408152825160408201526020830151606082015260408301516080820152606083015160a0820152608083015160c082015260a083015160e0820152600060c0840151610100818185015260e08601519150610120612148818601846001600160a01b03169052565b8187015192506101c09150610140828187015261216961020087018561206a565b9350818801519150603f1961016081888703018189015261218a86856120ae565b9550828a0151935061018092508188870301838901526121aa86856120ae565b9550808a01519350506101a08188870301818901526121c986856120ae565b9550828a015193506121de8589018515159052565b8901516101e08801525050506001600160a01b0385166020850152509050611893565b80820180821115611eaa57611eaa611e7b565b60008251612226818460208701611fb3565b9190910192915050565b6020815260006118936020830184611fd756fea26469706673582212207f9c21399ca4ba437f3a9e57d50efbda87d7960f2d1e74dd3783db24c665d2e864736f6c63430008110033", + "devdoc": { + "details": "This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.", + "events": { + "AdminFeesSet(bytes32,uint256,address)": { + "params": { + "caller": "- The caller of the function", + "key": "- Identifier for asset", + "newAdminFee": "- The updated fee" + } + }, + "AdminFeesWithdrawn(bytes32,address)": { + "params": { + "caller": "- The caller of the function", + "key": "- Identifier for asset" + } + }, + "LPTokenTargetUpdated(address,address,address)": { + "params": { + "caller": "- The caller of the function", + "newAddress": "- Updated address", + "oldAddress": "- The old lpTokenTargetAddress" + } + }, + "RampAStarted(bytes32,uint256,uint256,address)": { + "params": { + "caller": "- The caller of the function", + "futureA": "- The final A value after ramp", + "futureTime": "- The time A should reach the final value", + "key": "- Identifier for asset" + } + }, + "RampAStopped(bytes32,address)": { + "params": { + "caller": "- The caller of the function", + "key": "- Identifier for asset" + } + }, + "SwapDisabled(bytes32,address)": { + "params": { + "caller": "- The caller of the function", + "key": "- Identifier for asset" + } + }, + "SwapFeesSet(bytes32,uint256,address)": { + "params": { + "caller": "- The caller of the function", + "key": "- Identifier for asset", + "newSwapFee": "- The updated fee" + } + }, + "SwapInitialized(bytes32,(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,address,address[],uint256[],uint256[],uint256[],bool,uint256),address)": { + "params": { + "caller": "- The caller of the function", + "key": "- Identifier for asset", + "swap": "- The swap that was initialized" + } + }, + "SwapRemoved(bytes32,address)": { + "params": { + "caller": "- The caller of the function", + "key": "- Identifier for asset" + } + } + }, + "kind": "dev", + "methods": { + "disableSwap(bytes32)": { + "params": { + "_key": "the hash of the canonical id and domain for token" + } + }, + "initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)": { + "details": "The swap can only be updated after initialization via `rampA`. This means if this value is incorrectly set, it will take some time to reach the correct value.", + "params": { + "_a": "the amplification coefficient * n ** (n - 1). See the StableSwap paper for details", + "_adminFee": "default adminFee to be initialized with", + "_fee": "default swap fee to be initialized with", + "_key": "the hash of the canonical id and domain for token", + "_pooledTokens": "an array of ERC20s this pool will accept. length of this array should be in 2 ~ 16", + "decimals": "the decimals to use for each pooled token, eg 8 for WBTC. Cannot be larger than POOL_PRECISION_DECIMALS(18) Only fixed decimal tokens are allowed.", + "lpTokenName": "the long-form name of the token to be deployed", + "lpTokenSymbol": "the short symbol for the token to be deployed" + } + }, + "isDisabled(bytes32)": { + "params": { + "key": "Hash of the canonical id + domain" + }, + "returns": { + "_0": "disabled flag" + } + }, + "lpTokenTargetAddress()": { + "returns": { + "_0": "address" + } + }, + "rampA(bytes32,uint256,uint256)": { + "params": { + "futureA": "the new A to ramp towards", + "futureTime": "timestamp when the new A should be reached", + "key": "Hash of the canonical domain and id" + } + }, + "removeSwap(bytes32)": { + "params": { + "_key": "the hash of the canonical id and domain for token" + } + }, + "setSwapAdminFee(bytes32,uint256)": { + "params": { + "key": "Hash of the canonical domain and id", + "newAdminFee": "new admin fee to be applied on future transactions" + } + }, + "setSwapFee(bytes32,uint256)": { + "params": { + "key": "Hash of the canonical domain and id", + "newSwapFee": "new swap fee to be applied on future transactions" + } + }, + "stopRampA(bytes32)": { + "params": { + "key": "Hash of the canonical domain and id" + } + }, + "updateLpTokenTarget(address)": { + "params": { + "newAddress": "New lpTokenTargetAddress" + } + }, + "withdrawSwapAdminFees(bytes32)": { + "params": { + "key": "Hash of the canonical domain and id" + } + } + }, + "title": "SwapAdminFacet", + "version": 1 + }, + "userdoc": { + "events": { + "AdminFeesSet(bytes32,uint256,address)": { + "notice": "Emitted when the owner sets admin fees" + }, + "AdminFeesWithdrawn(bytes32,address)": { + "notice": "Emitted when the owner withdraws admin fees" + }, + "LPTokenTargetUpdated(address,address,address)": { + "notice": "Emitted when the owner update lpTokenTargetAddress" + }, + "RampAStarted(bytes32,uint256,uint256,address)": { + "notice": "Emitted when the owner starts ramping up or down the A parameter" + }, + "RampAStopped(bytes32,address)": { + "notice": "Emitted when the owner stops ramping up or down the A parameter" + }, + "SwapDisabled(bytes32,address)": { + "notice": "Emitted when the owner calls `disableSwap`" + }, + "SwapFeesSet(bytes32,uint256,address)": { + "notice": "Emitted when the owner sets swap fees" + }, + "SwapInitialized(bytes32,(bytes32,uint256,uint256,uint256,uint256,uint256,uint256,address,address[],uint256[],uint256[],uint256[],bool,uint256),address)": { + "notice": "Emitted when the owner calls `initializeSwap`" + }, + "SwapRemoved(bytes32,address)": { + "notice": "Emitted when the owner calls `removeSwap`" + } + }, + "kind": "user", + "methods": { + "disableSwap(bytes32)": { + "notice": "disable swap for key" + }, + "initializeSwap(bytes32,address[],uint8[],string,string,uint256,uint256,uint256)": { + "notice": "Initializes this Swap contract with the given parameters. This will also clone a LPToken contract that represents users' LP positions. The owner of LPToken will be this contract - which means only this contract is allowed to mint/burn tokens." + }, + "isDisabled(bytes32)": { + "notice": "Return if the pool is disabled" + }, + "lpTokenTargetAddress()": { + "notice": "Returns the lp target token address" + }, + "rampA(bytes32,uint256,uint256)": { + "notice": "Start ramping up or down A parameter towards given futureA and futureTime Checks if the change is too rapid, and commits the new A value only when it falls under the limit range." + }, + "removeSwap(bytes32)": { + "notice": "remove Swap Struct for key" + }, + "setSwapAdminFee(bytes32,uint256)": { + "notice": "Update the admin fee. Admin fee takes portion of the swap fee." + }, + "setSwapFee(bytes32,uint256)": { + "notice": "Update the swap fee to be applied on swaps" + }, + "stopRampA(bytes32)": { + "notice": "Stop ramping A immediately. Reverts if ramp A is already stopped." + }, + "updateLpTokenTarget(address)": { + "notice": "Update lpTokenTargetAddress" + }, + "withdrawSwapAdminFees(bytes32)": { + "notice": "Withdraw all admin fees to the contract owner" + } + }, + "notice": "Contract module which exposes only-admin controls for the StableSwapFacet contract.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/SwapAdminFacet.sol:SwapAdminFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/TestAdopted.json b/packages/deployments/contracts/deployments/fraxtal/TestAdopted.json new file mode 100644 index 0000000000..ec33ebf9da --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/TestAdopted.json @@ -0,0 +1,655 @@ +{ + "address": "0x13a1dBf4C746775F606C77f2fb36BBE90BB3b676", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_newName", + "type": "string" + }, + { + "internalType": "string", + "name": "_newSymbol", + "type": "string" + } + ], + "name": "setDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xe8dbee9ed49d60d6decf61cfe3418bc4e927e251ea6a3132b5fd563d3ab69d3d", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x13a1dBf4C746775F606C77f2fb36BBE90BB3b676", + "transactionIndex": 1, + "gasUsed": "1286723", + "logsBloom": "0x00000000000000000000000000000000000000000000400000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000002002000000000010000000000000000000000000000000000001020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x11b00b4a7ca8e3c1bdc6e29efdf96d6ef12e1d2fc10e6005983588c86fb9e0ec", + "transactionHash": "0xe8dbee9ed49d60d6decf61cfe3418bc4e927e251ea6a3132b5fd563d3ab69d3d", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2894878, + "transactionHash": "0xe8dbee9ed49d60d6decf61cfe3418bc4e927e251ea6a3132b5fd563d3ab69d3d", + "address": "0x13a1dBf4C746775F606C77f2fb36BBE90BB3b676", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "logIndex": 0, + "blockHash": "0x11b00b4a7ca8e3c1bdc6e29efdf96d6ef12e1d2fc10e6005983588c86fb9e0ec" + } + ], + "blockNumber": 2894878, + "cumulativeGasUsed": "1337285", + "status": 1, + "byzantium": true + }, + "args": [ + "Test Adopted", + "TEST2" + ], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_newName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_newSymbol\",\"type\":\"string\"}],\"name\":\"setDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Anybody can mint as many tokens as they likeAnybody can burn anyone else's tokens\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\",\"params\":{\"_deadline\":\"The timestamp before which the signature must be submitted\",\"_owner\":\"The account setting approval & signing the message\",\"_r\":\"ECDSA signature r\",\"_s\":\"ECDSA signature s\",\"_spender\":\"The account receiving approval to spend owner's tokens\",\"_v\":\"ECDSA signature v\",\"_value\":\"The amount to set approval for\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712\"}},\"notice\":\"This token is ONLY useful for testing\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n struct Counter {\\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n // this feature: see https://github.com/ethereum/solidity/issues/4637\\n uint256 _value; // default: 0\\n }\\n\\n function current(Counter storage counter) internal view returns (uint256) {\\n return counter._value;\\n }\\n\\n function increment(Counter storage counter) internal {\\n unchecked {\\n counter._value += 1;\\n }\\n }\\n\\n function decrement(Counter storage counter) internal {\\n uint256 value = counter._value;\\n require(value > 0, \\\"Counter: decrement overflow\\\");\\n unchecked {\\n counter._value = value - 1;\\n }\\n }\\n\\n function reset(Counter storage counter) internal {\\n counter._value = 0;\\n }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/OZERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n// This is modified from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\"\\n// Modifications were made to allow the name, hashed name, and cached\\n// domain separator to be internal\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\\\";\\nimport {EIP712} from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Counters.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * Implements ERC20 Permit extension allowing approvals to be made via\\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20\\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n *\\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\\n * the name (set to private).\\n *\\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\\n * These functions use the same implementation, with easier storage access.\\n */\\ncontract ERC20 is IERC20Metadata, IERC20Permit {\\n // See ERC20\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string internal _name; // made internal, need access\\n string internal _symbol; // made internal, need access\\n uint8 internal _decimals; // made internal, need access\\n\\n // See ERC20Permit\\n using Counters for Counters.Counter;\\n\\n mapping(address => Counters.Counter) private _nonces;\\n\\n // See EIP712\\n // Immutables used in EIP 712 structured data hashing & signing\\n // https://eips.ethereum.org/EIPS/eip-712\\n bytes32 private constant _PERMIT_TYPEHASH =\\n keccak256(\\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\");\\n bytes32 internal constant _TYPE_HASH =\\n keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n // made internal, need access\\n\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 internal _HASHED_NAME; // made internal, may change\\n bytes32 internal immutable _HASHED_VERSION; // made internal, need access\\n\\n /**\\n * @dev Initializes the {EIP712} domain separator using the `name` parameter,\\n * and setting `version` to `\\\"1\\\"`.\\n *\\n * It's a good idea to use the same `name` that is defined as the ERC20 token name.\\n */\\n constructor(\\n uint8 decimals_,\\n string memory name_,\\n string memory symbol_,\\n string memory version_\\n ) {\\n // ERC20\\n _name = name_;\\n _symbol = symbol_;\\n _decimals = decimals_;\\n\\n // EIP712\\n bytes32 hashedName = keccak256(bytes(name_));\\n bytes32 hashedVersion = keccak256(bytes(version_));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return _decimals;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n _transfer(msg.sender, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n _approve(msg.sender, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * Requirements:\\n *\\n * - `_sender` and `recipient` cannot be the zero address.\\n * - `_sender` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``_sender``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address _sender,\\n address _recipient,\\n uint256 _amount\\n ) public virtual override returns (bool) {\\n _spendAllowance(_sender, msg.sender, _amount);\\n _transfer(_sender, _recipient, _amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `_spender` cannot be the zero address.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\\n _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `_spender` cannot be the zero address.\\n * - `_spender` must have allowance for the caller of at least\\n * `_subtractedValue`.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\\n uint256 currentAllowance = allowance(msg.sender, _spender);\\n require(currentAllowance >= _subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves tokens `amount` from `_sender` to `_recipient`.\\n *\\n * This is internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `_sender` cannot be the zero address.\\n * - `_recipient` cannot be the zero address.\\n * - `_sender` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address _sender,\\n address _recipient,\\n uint256 _amount\\n ) internal virtual {\\n require(_sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(_recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(_sender, _recipient, _amount);\\n\\n uint256 fromBalance = _balances[_sender];\\n require(fromBalance >= _amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[_sender] = fromBalance - _amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[_recipient] += _amount;\\n }\\n\\n emit Transfer(_sender, _recipient, _amount);\\n\\n _afterTokenTransfer(_sender, _recipient, _amount);\\n }\\n\\n /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal virtual {\\n require(_account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), _account, _amount);\\n\\n _totalSupply += _amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[_account] += _amount;\\n }\\n emit Transfer(address(0), _account, _amount);\\n\\n _afterTokenTransfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal virtual {\\n require(_account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(_account, address(0), _amount);\\n\\n uint256 accountBalance = _balances[_account];\\n require(accountBalance >= _amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[_account] = accountBalance - _amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply\\n _totalSupply -= _amount;\\n }\\n\\n emit Transfer(_account, address(0), _amount);\\n\\n _afterTokenTransfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `_owner` cannot be the zero address.\\n * - `_spender` cannot be the zero address.\\n */\\n function _approve(\\n address _owner,\\n address _spender,\\n uint256 _amount\\n ) internal virtual {\\n require(_owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(_spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[_owner][_spender] = _amount;\\n emit Approval(_owner, _spender, _amount);\\n }\\n\\n /**\\n * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address _owner,\\n address _spender,\\n uint256 _amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(_owner, _spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= _amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(_owner, _spender, currentAllowance - _amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\\n * will be to transferred to `_to`.\\n * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\\n * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\\n * - `_from` and `_to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address _from,\\n address _to,\\n uint256 _amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address _from,\\n address _to,\\n uint256 _amount\\n ) internal virtual {}\\n\\n /**\\n * @dev See {IERC20Permit-permit}.\\n * @notice Sets approval from owner to spender to value\\n * as long as deadline has not passed\\n * by submitting a valid signature from owner\\n * Uses EIP 712 structured data hashing & signing\\n * https://eips.ethereum.org/EIPS/eip-712\\n * @param _owner The account setting approval & signing the message\\n * @param _spender The account receiving approval to spend owner's tokens\\n * @param _value The amount to set approval for\\n * @param _deadline The timestamp before which the signature must be submitted\\n * @param _v ECDSA signature v\\n * @param _r ECDSA signature r\\n * @param _s ECDSA signature s\\n */\\n function permit(\\n address _owner,\\n address _spender,\\n uint256 _value,\\n uint256 _deadline,\\n uint8 _v,\\n bytes32 _r,\\n bytes32 _s\\n ) public virtual override {\\n require(block.timestamp <= _deadline, \\\"ERC20Permit: expired deadline\\\");\\n\\n bytes32 _structHash = keccak256(\\n abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\\n );\\n\\n bytes32 _hash = _hashTypedDataV4(_structHash);\\n\\n address _signer = ECDSA.recover(_hash, _v, _r, _s);\\n require(_signer == _owner, \\\"ERC20Permit: invalid signature\\\");\\n\\n _approve(_owner, _spender, _value);\\n }\\n\\n /**\\n * @dev See {IERC20Permit-nonces}.\\n */\\n function nonces(address _owner) public view virtual override returns (uint256) {\\n return _nonces[_owner].current();\\n }\\n\\n /**\\n * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\\n * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\\n */\\n function DOMAIN_SEPARATOR() external view override returns (bytes32) {\\n return _domainSeparatorV4();\\n }\\n\\n /**\\n * @dev \\\"Consume a nonce\\\": return the current value and increment.\\n * @dev See {EIP712._buildDomainSeparator}\\n */\\n function _useNonce(address _owner) internal virtual returns (uint256 current) {\\n Counters.Counter storage nonce = _nonces[_owner];\\n current = nonce.current();\\n nonce.increment();\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n * @dev See {EIP712._buildDomainSeparator}\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n /**\\n * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\\n */\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) internal view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x7219667c651b2cbcbd1866667c5aa5fa1b1120a2fc111f24290c5ece3b3bba52\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n function burn(address _from, uint256 _amnt) external;\\n\\n function mint(address _to, uint256 _amnt) external;\\n\\n function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/test/TestERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20} from \\\"../core/connext/helpers/OZERC20.sol\\\";\\nimport {IERC20Metadata, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../core/connext/interfaces/IBridgeToken.sol\\\";\\n\\n/**\\n * @notice This token is ONLY useful for testing\\n * @dev Anybody can mint as many tokens as they like\\n * @dev Anybody can burn anyone else's tokens\\n */\\ncontract TestERC20 is ERC20, IBridgeToken {\\n constructor(string memory _name, string memory _symbol) ERC20(18, _name, _symbol, \\\"1\\\") {\\n _mint(msg.sender, 1000000 ether);\\n }\\n\\n // ============ Bridge functions ===============\\n function setDetails(string calldata _newName, string calldata _newSymbol) external override {\\n // Does nothing, in practice will update the details to match the hash in message\\n // not the autodeployed results\\n _name = _newName;\\n _symbol = _newSymbol;\\n }\\n\\n // ============ Token functions ===============\\n function balanceOf(address account) public view override(ERC20, IERC20) returns (uint256) {\\n return ERC20.balanceOf(account);\\n }\\n\\n function mint(address account, uint256 amount) external {\\n _mint(account, amount);\\n }\\n\\n function burn(address account, uint256 amount) external {\\n _burn(account, amount);\\n }\\n\\n function symbol() public view override(ERC20, IERC20Metadata) returns (string memory) {\\n return ERC20.symbol();\\n }\\n\\n function name() public view override(ERC20, IERC20Metadata) returns (string memory) {\\n return ERC20.name();\\n }\\n\\n function decimals() public view override(ERC20, IERC20Metadata) returns (uint8) {\\n return ERC20.decimals();\\n }\\n}\\n\",\"keccak256\":\"0xa902d583edf740f12ee31f72429456cc025ff9a8a2378fd6edd43d23eeb5158c\",\"license\":\"UNLICENSED\"}},\"version\":1}", + "bytecode": "0x60e06040523480156200001157600080fd5b50604051620017ee380380620017ee8339810160408190526200003491620002ba565b60128282604051806040016040528060018152602001603160f81b8152508260039081620000639190620003b2565b506004620000728382620003b2565b506005805460ff191660ff9590951694909417909355508051602091820120825192820192909220600883905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a0808601829052835180870382018152959092019092528351939092019290922060075552620001223369d3c21bcecceda10000006200012a565b5050620004a6565b6001600160a01b038216620001855760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200019991906200047e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021d57600080fd5b81516001600160401b03808211156200023a576200023a620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002655762000265620001f5565b816040528381526020925086838588010111156200028257600080fd5b600091505b83821015620002a6578582018301518183018401529082019062000287565b600093810190920192909252949350505050565b60008060408385031215620002ce57600080fd5b82516001600160401b0380821115620002e657600080fd5b620002f4868387016200020b565b935060208501519150808211156200030b57600080fd5b506200031a858286016200020b565b9150509250929050565b600181811c908216806200033957607f821691505b6020821081036200035a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f057600081815260208120601f850160051c81016020861015620003895750805b601f850160051c820191505b81811015620003aa5782815560010162000395565b505050505050565b81516001600160401b03811115620003ce57620003ce620001f5565b620003e681620003df845462000324565b8462000360565b602080601f8311600181146200041e5760008415620004055750858301515b600019600386901b1c1916600185901b178555620003aa565b600085815260208120601f198616915b828110156200044f578886015182559484019460019091019084016200042e565b50858210156200046e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620004a057634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051611318620004d66000396000610a0c01526000610979015260006109a301526113186000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610201578063a9059cbb14610214578063b7b090ee14610227578063d505accf1461023a578063dd62ed3e1461024d57600080fd5b806370a08231146101c05780637ecebe00146101d357806395d89b41146101e65780639dc29fac146101ee57600080fd5b8063313ce567116100de578063313ce567146101765780633644e51514610190578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610260565b6040516101259190610f06565b60405180910390f35b61014161013c366004610f70565b61026f565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610f9a565b610286565b61017e6102a8565b60405160ff9091168152602001610125565b6101556102b6565b6101416101a6366004610f70565b6102c0565b6101be6101b9366004610f70565b6102fc565b005b6101556101ce366004610fd6565b61030a565b6101556101e1366004610fd6565b610328565b610118610346565b6101be6101fc366004610f70565b610350565b61014161020f366004610f70565b61035a565b610141610222366004610f70565b6103d9565b6101be610235366004611041565b6103e6565b6101be6102483660046110ad565b610408565b61015561025b366004611120565b61056c565b606061026a610597565b905090565b600061027c338484610629565b5060015b92915050565b600061029384338461074e565b61029e8484846107c8565b5060019392505050565b600061026a60055460ff1690565b600061026a61096c565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161027c9185906102f7908690611153565b610629565b6103068282610a5a565b5050565b6001600160a01b038116600090815260208190526040812054610280565b6001600160a01b038116600090815260066020526040812054610280565b606061026a610b19565b6103068282610b28565b600080610367338561056c565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029e3385858403610629565b600061027c3384846107c8565b60036103f384868361120c565b50600461040182848361120c565b5050505050565b834211156104585760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104878c610c57565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e282610c7f565b905060006104f282878787610ccd565b9050896001600160a01b0316816001600160a01b0316146105555760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b6105608a8a8a610629565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546105a69061118a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061118a565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b6001600160a01b03831661068b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061075a848461056c565b905060001981146107c257818110156107b55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b6107c28484848403610629565b50505050565b6001600160a01b03831661082c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156109065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107c2565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109c557507f000000000000000000000000000000000000000000000000000000000000000046145b156109d1575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c3565b8060026000828254610ac29190611153565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060600480546105a69061118a565b6001600160a01b038216610b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c3565b6001600160a01b03821660009081526020819052604090205481811015610bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c3565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610741565b505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b6000610280610c8c61096c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610cde87878787610cf5565b91509150610ceb81610db9565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d2c5750600090506003610db0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d80573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da957600060019250925050610db0565b9150600090505b94509492505050565b6000816004811115610dcd57610dcd6112cc565b03610dd55750565b6001816004811115610de957610de96112cc565b03610e365760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610e4a57610e4a6112cc565b03610e975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610eab57610eab6112cc565b03610f035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f6b57600080fd5b919050565b60008060408385031215610f8357600080fd5b610f8c83610f54565b946020939093013593505050565b600080600060608486031215610faf57600080fd5b610fb884610f54565b9250610fc660208501610f54565b9150604084013590509250925092565b600060208284031215610fe857600080fd5b610ff182610f54565b9392505050565b60008083601f84011261100a57600080fd5b50813567ffffffffffffffff81111561102257600080fd5b60208301915083602082850101111561103a57600080fd5b9250929050565b6000806000806040858703121561105757600080fd5b843567ffffffffffffffff8082111561106f57600080fd5b61107b88838901610ff8565b9096509450602087013591508082111561109457600080fd5b506110a187828801610ff8565b95989497509550505050565b600080600080600080600060e0888a0312156110c857600080fd5b6110d188610f54565b96506110df60208901610f54565b95506040880135945060608801359350608088013560ff8116811461110357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561113357600080fd5b61113c83610f54565b915061114a60208401610f54565b90509250929050565b8082018082111561028057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061119e57607f821691505b602082108103610c7957634e487b7160e01b600052602260045260246000fd5b601f821115610c5257600081815260208120601f850160051c810160208610156111e55750805b601f850160051c820191505b81811015611204578281556001016111f1565b505050505050565b67ffffffffffffffff83111561122457611224611174565b61123883611232835461118a565b836111be565b6000601f84116001811461126c57600085156112545750838201355b600019600387901b1c1916600186901b178355610401565b600083815260209020601f19861690835b8281101561129d578685013582556020948501946001909201910161127d565b50868210156112ba5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fc9fa7104ced2bd0804bef90105fb24ffacb00742d1be2d37a77174cd20fba2564736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610201578063a9059cbb14610214578063b7b090ee14610227578063d505accf1461023a578063dd62ed3e1461024d57600080fd5b806370a08231146101c05780637ecebe00146101d357806395d89b41146101e65780639dc29fac146101ee57600080fd5b8063313ce567116100de578063313ce567146101765780633644e51514610190578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610260565b6040516101259190610f06565b60405180910390f35b61014161013c366004610f70565b61026f565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610f9a565b610286565b61017e6102a8565b60405160ff9091168152602001610125565b6101556102b6565b6101416101a6366004610f70565b6102c0565b6101be6101b9366004610f70565b6102fc565b005b6101556101ce366004610fd6565b61030a565b6101556101e1366004610fd6565b610328565b610118610346565b6101be6101fc366004610f70565b610350565b61014161020f366004610f70565b61035a565b610141610222366004610f70565b6103d9565b6101be610235366004611041565b6103e6565b6101be6102483660046110ad565b610408565b61015561025b366004611120565b61056c565b606061026a610597565b905090565b600061027c338484610629565b5060015b92915050565b600061029384338461074e565b61029e8484846107c8565b5060019392505050565b600061026a60055460ff1690565b600061026a61096c565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161027c9185906102f7908690611153565b610629565b6103068282610a5a565b5050565b6001600160a01b038116600090815260208190526040812054610280565b6001600160a01b038116600090815260066020526040812054610280565b606061026a610b19565b6103068282610b28565b600080610367338561056c565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029e3385858403610629565b600061027c3384846107c8565b60036103f384868361120c565b50600461040182848361120c565b5050505050565b834211156104585760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104878c610c57565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e282610c7f565b905060006104f282878787610ccd565b9050896001600160a01b0316816001600160a01b0316146105555760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b6105608a8a8a610629565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546105a69061118a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061118a565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b6001600160a01b03831661068b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061075a848461056c565b905060001981146107c257818110156107b55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b6107c28484848403610629565b50505050565b6001600160a01b03831661082c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156109065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107c2565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109c557507f000000000000000000000000000000000000000000000000000000000000000046145b156109d1575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c3565b8060026000828254610ac29190611153565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060600480546105a69061118a565b6001600160a01b038216610b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c3565b6001600160a01b03821660009081526020819052604090205481811015610bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c3565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610741565b505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b6000610280610c8c61096c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610cde87878787610cf5565b91509150610ceb81610db9565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d2c5750600090506003610db0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d80573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da957600060019250925050610db0565b9150600090505b94509492505050565b6000816004811115610dcd57610dcd6112cc565b03610dd55750565b6001816004811115610de957610de96112cc565b03610e365760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610e4a57610e4a6112cc565b03610e975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610eab57610eab6112cc565b03610f035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f6b57600080fd5b919050565b60008060408385031215610f8357600080fd5b610f8c83610f54565b946020939093013593505050565b600080600060608486031215610faf57600080fd5b610fb884610f54565b9250610fc660208501610f54565b9150604084013590509250925092565b600060208284031215610fe857600080fd5b610ff182610f54565b9392505050565b60008083601f84011261100a57600080fd5b50813567ffffffffffffffff81111561102257600080fd5b60208301915083602082850101111561103a57600080fd5b9250929050565b6000806000806040858703121561105757600080fd5b843567ffffffffffffffff8082111561106f57600080fd5b61107b88838901610ff8565b9096509450602087013591508082111561109457600080fd5b506110a187828801610ff8565b95989497509550505050565b600080600080600080600060e0888a0312156110c857600080fd5b6110d188610f54565b96506110df60208901610f54565b95506040880135945060608801359350608088013560ff8116811461110357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561113357600080fd5b61113c83610f54565b915061114a60208401610f54565b90509250929050565b8082018082111561028057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061119e57607f821691505b602082108103610c7957634e487b7160e01b600052602260045260246000fd5b601f821115610c5257600081815260208120601f850160051c810160208610156111e55750805b601f850160051c820191505b81811015611204578281556001016111f1565b505050505050565b67ffffffffffffffff83111561122457611224611174565b61123883611232835461118a565b836111be565b6000601f84116001811461126c57600085156112545750838201355b600019600387901b1c1916600186901b178355610401565b600083815260209020601f19861690835b8281101561129d578685013582556020948501946001909201910161127d565b50868210156112ba5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fc9fa7104ced2bd0804bef90105fb24ffacb00742d1be2d37a77174cd20fba2564736f6c63430008110033", + "devdoc": { + "details": "Anybody can mint as many tokens as they likeAnybody can burn anyone else's tokens", + "kind": "dev", + "methods": { + "DOMAIN_SEPARATOR()": { + "details": "See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant." + }, + "allowance(address,address)": { + "details": "See {IERC20-allowance}." + }, + "approve(address,uint256)": { + "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." + }, + "decreaseAllowance(address,uint256)": { + "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`." + }, + "increaseAllowance(address,uint256)": { + "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address." + }, + "nonces(address)": { + "details": "See {IERC20Permit-nonces}." + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "details": "See {IERC20Permit-permit}.", + "params": { + "_deadline": "The timestamp before which the signature must be submitted", + "_owner": "The account setting approval & signing the message", + "_r": "ECDSA signature r", + "_s": "ECDSA signature s", + "_spender": "The account receiving approval to spend owner's tokens", + "_v": "ECDSA signature v", + "_value": "The amount to set approval for" + } + }, + "totalSupply()": { + "details": "See {IERC20-totalSupply}." + }, + "transfer(address,uint256)": { + "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "notice": "Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712" + } + }, + "notice": "This token is ONLY useful for testing", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 15588, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_balances", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 15594, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_allowances", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 15596, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_totalSupply", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 15598, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_name", + "offset": 0, + "slot": "3", + "type": "t_string_storage" + }, + { + "astId": 15600, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_symbol", + "offset": 0, + "slot": "4", + "type": "t_string_storage" + }, + { + "astId": 15602, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_decimals", + "offset": 0, + "slot": "5", + "type": "t_uint8" + }, + { + "astId": 15611, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_nonces", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(Counter)3660_storage)" + }, + { + "astId": 15623, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_CACHED_DOMAIN_SEPARATOR", + "offset": 0, + "slot": "7", + "type": "t_bytes32" + }, + { + "astId": 15629, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "8", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(Counter)3660_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct Counters.Counter)", + "numberOfBytes": "32", + "value": "t_struct(Counter)3660_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Counter)3660_storage": { + "encoding": "inplace", + "label": "struct Counters.Counter", + "members": [ + { + "astId": 3659, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_value", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/TestERC20.json b/packages/deployments/contracts/deployments/fraxtal/TestERC20.json new file mode 100644 index 0000000000..b2904aeae3 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/TestERC20.json @@ -0,0 +1,655 @@ +{ + "address": "0x3fC2E30a9868962A6b4d49116A3Dd715D38Ff707", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_newName", + "type": "string" + }, + { + "internalType": "string", + "name": "_newSymbol", + "type": "string" + } + ], + "name": "setDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x8f4fdee7ab366be2985fd3ff4c8704f39f2e9bd9ed19c12b225f8e2951c07b4e", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x3fC2E30a9868962A6b4d49116A3Dd715D38Ff707", + "transactionIndex": 1, + "gasUsed": "1286687", + "logsBloom": "0x00000000000000000000000000000000000010000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000001020000000000000000000000000000000000000000000200000000000000000000004", + "blockHash": "0x92dc19181e1128fdb49c08ba3a3439a414dd5eac30bf1cb272061cd887bb250b", + "transactionHash": "0x8f4fdee7ab366be2985fd3ff4c8704f39f2e9bd9ed19c12b225f8e2951c07b4e", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2894873, + "transactionHash": "0x8f4fdee7ab366be2985fd3ff4c8704f39f2e9bd9ed19c12b225f8e2951c07b4e", + "address": "0x3fC2E30a9868962A6b4d49116A3Dd715D38Ff707", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "logIndex": 1, + "blockHash": "0x92dc19181e1128fdb49c08ba3a3439a414dd5eac30bf1cb272061cd887bb250b" + } + ], + "blockNumber": 2894873, + "cumulativeGasUsed": "1362273", + "status": 1, + "byzantium": true + }, + "args": [ + "Test Token", + "TEST" + ], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_newName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_newSymbol\",\"type\":\"string\"}],\"name\":\"setDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Anybody can mint as many tokens as they likeAnybody can burn anyone else's tokens\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\",\"params\":{\"_deadline\":\"The timestamp before which the signature must be submitted\",\"_owner\":\"The account setting approval & signing the message\",\"_r\":\"ECDSA signature r\",\"_s\":\"ECDSA signature s\",\"_spender\":\"The account receiving approval to spend owner's tokens\",\"_v\":\"ECDSA signature v\",\"_value\":\"The amount to set approval for\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712\"}},\"notice\":\"This token is ONLY useful for testing\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n struct Counter {\\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n // this feature: see https://github.com/ethereum/solidity/issues/4637\\n uint256 _value; // default: 0\\n }\\n\\n function current(Counter storage counter) internal view returns (uint256) {\\n return counter._value;\\n }\\n\\n function increment(Counter storage counter) internal {\\n unchecked {\\n counter._value += 1;\\n }\\n }\\n\\n function decrement(Counter storage counter) internal {\\n uint256 value = counter._value;\\n require(value > 0, \\\"Counter: decrement overflow\\\");\\n unchecked {\\n counter._value = value - 1;\\n }\\n }\\n\\n function reset(Counter storage counter) internal {\\n counter._value = 0;\\n }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/OZERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n// This is modified from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\"\\n// Modifications were made to allow the name, hashed name, and cached\\n// domain separator to be internal\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\\\";\\nimport {EIP712} from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Counters.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * Implements ERC20 Permit extension allowing approvals to be made via\\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20\\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n *\\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\\n * the name (set to private).\\n *\\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\\n * These functions use the same implementation, with easier storage access.\\n */\\ncontract ERC20 is IERC20Metadata, IERC20Permit {\\n // See ERC20\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string internal _name; // made internal, need access\\n string internal _symbol; // made internal, need access\\n uint8 internal _decimals; // made internal, need access\\n\\n // See ERC20Permit\\n using Counters for Counters.Counter;\\n\\n mapping(address => Counters.Counter) private _nonces;\\n\\n // See EIP712\\n // Immutables used in EIP 712 structured data hashing & signing\\n // https://eips.ethereum.org/EIPS/eip-712\\n bytes32 private constant _PERMIT_TYPEHASH =\\n keccak256(\\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\");\\n bytes32 internal constant _TYPE_HASH =\\n keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n // made internal, need access\\n\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 internal _HASHED_NAME; // made internal, may change\\n bytes32 internal immutable _HASHED_VERSION; // made internal, need access\\n\\n /**\\n * @dev Initializes the {EIP712} domain separator using the `name` parameter,\\n * and setting `version` to `\\\"1\\\"`.\\n *\\n * It's a good idea to use the same `name` that is defined as the ERC20 token name.\\n */\\n constructor(\\n uint8 decimals_,\\n string memory name_,\\n string memory symbol_,\\n string memory version_\\n ) {\\n // ERC20\\n _name = name_;\\n _symbol = symbol_;\\n _decimals = decimals_;\\n\\n // EIP712\\n bytes32 hashedName = keccak256(bytes(name_));\\n bytes32 hashedVersion = keccak256(bytes(version_));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return _decimals;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n _transfer(msg.sender, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n _approve(msg.sender, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * Requirements:\\n *\\n * - `_sender` and `recipient` cannot be the zero address.\\n * - `_sender` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``_sender``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address _sender,\\n address _recipient,\\n uint256 _amount\\n ) public virtual override returns (bool) {\\n _spendAllowance(_sender, msg.sender, _amount);\\n _transfer(_sender, _recipient, _amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `_spender` cannot be the zero address.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\\n _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `_spender` cannot be the zero address.\\n * - `_spender` must have allowance for the caller of at least\\n * `_subtractedValue`.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\\n uint256 currentAllowance = allowance(msg.sender, _spender);\\n require(currentAllowance >= _subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves tokens `amount` from `_sender` to `_recipient`.\\n *\\n * This is internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `_sender` cannot be the zero address.\\n * - `_recipient` cannot be the zero address.\\n * - `_sender` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address _sender,\\n address _recipient,\\n uint256 _amount\\n ) internal virtual {\\n require(_sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(_recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(_sender, _recipient, _amount);\\n\\n uint256 fromBalance = _balances[_sender];\\n require(fromBalance >= _amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[_sender] = fromBalance - _amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[_recipient] += _amount;\\n }\\n\\n emit Transfer(_sender, _recipient, _amount);\\n\\n _afterTokenTransfer(_sender, _recipient, _amount);\\n }\\n\\n /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal virtual {\\n require(_account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), _account, _amount);\\n\\n _totalSupply += _amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[_account] += _amount;\\n }\\n emit Transfer(address(0), _account, _amount);\\n\\n _afterTokenTransfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal virtual {\\n require(_account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(_account, address(0), _amount);\\n\\n uint256 accountBalance = _balances[_account];\\n require(accountBalance >= _amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[_account] = accountBalance - _amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply\\n _totalSupply -= _amount;\\n }\\n\\n emit Transfer(_account, address(0), _amount);\\n\\n _afterTokenTransfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `_owner` cannot be the zero address.\\n * - `_spender` cannot be the zero address.\\n */\\n function _approve(\\n address _owner,\\n address _spender,\\n uint256 _amount\\n ) internal virtual {\\n require(_owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(_spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[_owner][_spender] = _amount;\\n emit Approval(_owner, _spender, _amount);\\n }\\n\\n /**\\n * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address _owner,\\n address _spender,\\n uint256 _amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(_owner, _spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= _amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(_owner, _spender, currentAllowance - _amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\\n * will be to transferred to `_to`.\\n * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\\n * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\\n * - `_from` and `_to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address _from,\\n address _to,\\n uint256 _amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address _from,\\n address _to,\\n uint256 _amount\\n ) internal virtual {}\\n\\n /**\\n * @dev See {IERC20Permit-permit}.\\n * @notice Sets approval from owner to spender to value\\n * as long as deadline has not passed\\n * by submitting a valid signature from owner\\n * Uses EIP 712 structured data hashing & signing\\n * https://eips.ethereum.org/EIPS/eip-712\\n * @param _owner The account setting approval & signing the message\\n * @param _spender The account receiving approval to spend owner's tokens\\n * @param _value The amount to set approval for\\n * @param _deadline The timestamp before which the signature must be submitted\\n * @param _v ECDSA signature v\\n * @param _r ECDSA signature r\\n * @param _s ECDSA signature s\\n */\\n function permit(\\n address _owner,\\n address _spender,\\n uint256 _value,\\n uint256 _deadline,\\n uint8 _v,\\n bytes32 _r,\\n bytes32 _s\\n ) public virtual override {\\n require(block.timestamp <= _deadline, \\\"ERC20Permit: expired deadline\\\");\\n\\n bytes32 _structHash = keccak256(\\n abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\\n );\\n\\n bytes32 _hash = _hashTypedDataV4(_structHash);\\n\\n address _signer = ECDSA.recover(_hash, _v, _r, _s);\\n require(_signer == _owner, \\\"ERC20Permit: invalid signature\\\");\\n\\n _approve(_owner, _spender, _value);\\n }\\n\\n /**\\n * @dev See {IERC20Permit-nonces}.\\n */\\n function nonces(address _owner) public view virtual override returns (uint256) {\\n return _nonces[_owner].current();\\n }\\n\\n /**\\n * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\\n * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\\n */\\n function DOMAIN_SEPARATOR() external view override returns (bytes32) {\\n return _domainSeparatorV4();\\n }\\n\\n /**\\n * @dev \\\"Consume a nonce\\\": return the current value and increment.\\n * @dev See {EIP712._buildDomainSeparator}\\n */\\n function _useNonce(address _owner) internal virtual returns (uint256 current) {\\n Counters.Counter storage nonce = _nonces[_owner];\\n current = nonce.current();\\n nonce.increment();\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n * @dev See {EIP712._buildDomainSeparator}\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n /**\\n * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\\n */\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) internal view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x7219667c651b2cbcbd1866667c5aa5fa1b1120a2fc111f24290c5ece3b3bba52\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n function burn(address _from, uint256 _amnt) external;\\n\\n function mint(address _to, uint256 _amnt) external;\\n\\n function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/test/TestERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20} from \\\"../core/connext/helpers/OZERC20.sol\\\";\\nimport {IERC20Metadata, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../core/connext/interfaces/IBridgeToken.sol\\\";\\n\\n/**\\n * @notice This token is ONLY useful for testing\\n * @dev Anybody can mint as many tokens as they like\\n * @dev Anybody can burn anyone else's tokens\\n */\\ncontract TestERC20 is ERC20, IBridgeToken {\\n constructor(string memory _name, string memory _symbol) ERC20(18, _name, _symbol, \\\"1\\\") {\\n _mint(msg.sender, 1000000 ether);\\n }\\n\\n // ============ Bridge functions ===============\\n function setDetails(string calldata _newName, string calldata _newSymbol) external override {\\n // Does nothing, in practice will update the details to match the hash in message\\n // not the autodeployed results\\n _name = _newName;\\n _symbol = _newSymbol;\\n }\\n\\n // ============ Token functions ===============\\n function balanceOf(address account) public view override(ERC20, IERC20) returns (uint256) {\\n return ERC20.balanceOf(account);\\n }\\n\\n function mint(address account, uint256 amount) external {\\n _mint(account, amount);\\n }\\n\\n function burn(address account, uint256 amount) external {\\n _burn(account, amount);\\n }\\n\\n function symbol() public view override(ERC20, IERC20Metadata) returns (string memory) {\\n return ERC20.symbol();\\n }\\n\\n function name() public view override(ERC20, IERC20Metadata) returns (string memory) {\\n return ERC20.name();\\n }\\n\\n function decimals() public view override(ERC20, IERC20Metadata) returns (uint8) {\\n return ERC20.decimals();\\n }\\n}\\n\",\"keccak256\":\"0xa902d583edf740f12ee31f72429456cc025ff9a8a2378fd6edd43d23eeb5158c\",\"license\":\"UNLICENSED\"}},\"version\":1}", + "bytecode": "0x60e06040523480156200001157600080fd5b50604051620017ee380380620017ee8339810160408190526200003491620002ba565b60128282604051806040016040528060018152602001603160f81b8152508260039081620000639190620003b2565b506004620000728382620003b2565b506005805460ff191660ff9590951694909417909355508051602091820120825192820192909220600883905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a0808601829052835180870382018152959092019092528351939092019290922060075552620001223369d3c21bcecceda10000006200012a565b5050620004a6565b6001600160a01b038216620001855760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200019991906200047e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021d57600080fd5b81516001600160401b03808211156200023a576200023a620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002655762000265620001f5565b816040528381526020925086838588010111156200028257600080fd5b600091505b83821015620002a6578582018301518183018401529082019062000287565b600093810190920192909252949350505050565b60008060408385031215620002ce57600080fd5b82516001600160401b0380821115620002e657600080fd5b620002f4868387016200020b565b935060208501519150808211156200030b57600080fd5b506200031a858286016200020b565b9150509250929050565b600181811c908216806200033957607f821691505b6020821081036200035a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f057600081815260208120601f850160051c81016020861015620003895750805b601f850160051c820191505b81811015620003aa5782815560010162000395565b505050505050565b81516001600160401b03811115620003ce57620003ce620001f5565b620003e681620003df845462000324565b8462000360565b602080601f8311600181146200041e5760008415620004055750858301515b600019600386901b1c1916600185901b178555620003aa565b600085815260208120601f198616915b828110156200044f578886015182559484019460019091019084016200042e565b50858210156200046e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620004a057634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051611318620004d66000396000610a0c01526000610979015260006109a301526113186000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610201578063a9059cbb14610214578063b7b090ee14610227578063d505accf1461023a578063dd62ed3e1461024d57600080fd5b806370a08231146101c05780637ecebe00146101d357806395d89b41146101e65780639dc29fac146101ee57600080fd5b8063313ce567116100de578063313ce567146101765780633644e51514610190578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610260565b6040516101259190610f06565b60405180910390f35b61014161013c366004610f70565b61026f565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610f9a565b610286565b61017e6102a8565b60405160ff9091168152602001610125565b6101556102b6565b6101416101a6366004610f70565b6102c0565b6101be6101b9366004610f70565b6102fc565b005b6101556101ce366004610fd6565b61030a565b6101556101e1366004610fd6565b610328565b610118610346565b6101be6101fc366004610f70565b610350565b61014161020f366004610f70565b61035a565b610141610222366004610f70565b6103d9565b6101be610235366004611041565b6103e6565b6101be6102483660046110ad565b610408565b61015561025b366004611120565b61056c565b606061026a610597565b905090565b600061027c338484610629565b5060015b92915050565b600061029384338461074e565b61029e8484846107c8565b5060019392505050565b600061026a60055460ff1690565b600061026a61096c565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161027c9185906102f7908690611153565b610629565b6103068282610a5a565b5050565b6001600160a01b038116600090815260208190526040812054610280565b6001600160a01b038116600090815260066020526040812054610280565b606061026a610b19565b6103068282610b28565b600080610367338561056c565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029e3385858403610629565b600061027c3384846107c8565b60036103f384868361120c565b50600461040182848361120c565b5050505050565b834211156104585760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104878c610c57565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e282610c7f565b905060006104f282878787610ccd565b9050896001600160a01b0316816001600160a01b0316146105555760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b6105608a8a8a610629565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546105a69061118a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061118a565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b6001600160a01b03831661068b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061075a848461056c565b905060001981146107c257818110156107b55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b6107c28484848403610629565b50505050565b6001600160a01b03831661082c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156109065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107c2565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109c557507f000000000000000000000000000000000000000000000000000000000000000046145b156109d1575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c3565b8060026000828254610ac29190611153565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060600480546105a69061118a565b6001600160a01b038216610b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c3565b6001600160a01b03821660009081526020819052604090205481811015610bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c3565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610741565b505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b6000610280610c8c61096c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610cde87878787610cf5565b91509150610ceb81610db9565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d2c5750600090506003610db0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d80573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da957600060019250925050610db0565b9150600090505b94509492505050565b6000816004811115610dcd57610dcd6112cc565b03610dd55750565b6001816004811115610de957610de96112cc565b03610e365760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610e4a57610e4a6112cc565b03610e975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610eab57610eab6112cc565b03610f035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f6b57600080fd5b919050565b60008060408385031215610f8357600080fd5b610f8c83610f54565b946020939093013593505050565b600080600060608486031215610faf57600080fd5b610fb884610f54565b9250610fc660208501610f54565b9150604084013590509250925092565b600060208284031215610fe857600080fd5b610ff182610f54565b9392505050565b60008083601f84011261100a57600080fd5b50813567ffffffffffffffff81111561102257600080fd5b60208301915083602082850101111561103a57600080fd5b9250929050565b6000806000806040858703121561105757600080fd5b843567ffffffffffffffff8082111561106f57600080fd5b61107b88838901610ff8565b9096509450602087013591508082111561109457600080fd5b506110a187828801610ff8565b95989497509550505050565b600080600080600080600060e0888a0312156110c857600080fd5b6110d188610f54565b96506110df60208901610f54565b95506040880135945060608801359350608088013560ff8116811461110357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561113357600080fd5b61113c83610f54565b915061114a60208401610f54565b90509250929050565b8082018082111561028057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061119e57607f821691505b602082108103610c7957634e487b7160e01b600052602260045260246000fd5b601f821115610c5257600081815260208120601f850160051c810160208610156111e55750805b601f850160051c820191505b81811015611204578281556001016111f1565b505050505050565b67ffffffffffffffff83111561122457611224611174565b61123883611232835461118a565b836111be565b6000601f84116001811461126c57600085156112545750838201355b600019600387901b1c1916600186901b178355610401565b600083815260209020601f19861690835b8281101561129d578685013582556020948501946001909201910161127d565b50868210156112ba5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fc9fa7104ced2bd0804bef90105fb24ffacb00742d1be2d37a77174cd20fba2564736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610201578063a9059cbb14610214578063b7b090ee14610227578063d505accf1461023a578063dd62ed3e1461024d57600080fd5b806370a08231146101c05780637ecebe00146101d357806395d89b41146101e65780639dc29fac146101ee57600080fd5b8063313ce567116100de578063313ce567146101765780633644e51514610190578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610260565b6040516101259190610f06565b60405180910390f35b61014161013c366004610f70565b61026f565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610f9a565b610286565b61017e6102a8565b60405160ff9091168152602001610125565b6101556102b6565b6101416101a6366004610f70565b6102c0565b6101be6101b9366004610f70565b6102fc565b005b6101556101ce366004610fd6565b61030a565b6101556101e1366004610fd6565b610328565b610118610346565b6101be6101fc366004610f70565b610350565b61014161020f366004610f70565b61035a565b610141610222366004610f70565b6103d9565b6101be610235366004611041565b6103e6565b6101be6102483660046110ad565b610408565b61015561025b366004611120565b61056c565b606061026a610597565b905090565b600061027c338484610629565b5060015b92915050565b600061029384338461074e565b61029e8484846107c8565b5060019392505050565b600061026a60055460ff1690565b600061026a61096c565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161027c9185906102f7908690611153565b610629565b6103068282610a5a565b5050565b6001600160a01b038116600090815260208190526040812054610280565b6001600160a01b038116600090815260066020526040812054610280565b606061026a610b19565b6103068282610b28565b600080610367338561056c565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029e3385858403610629565b600061027c3384846107c8565b60036103f384868361120c565b50600461040182848361120c565b5050505050565b834211156104585760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104878c610c57565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e282610c7f565b905060006104f282878787610ccd565b9050896001600160a01b0316816001600160a01b0316146105555760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b6105608a8a8a610629565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546105a69061118a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061118a565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b6001600160a01b03831661068b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061075a848461056c565b905060001981146107c257818110156107b55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b6107c28484848403610629565b50505050565b6001600160a01b03831661082c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156109065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107c2565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109c557507f000000000000000000000000000000000000000000000000000000000000000046145b156109d1575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c3565b8060026000828254610ac29190611153565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060600480546105a69061118a565b6001600160a01b038216610b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c3565b6001600160a01b03821660009081526020819052604090205481811015610bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c3565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610741565b505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b6000610280610c8c61096c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610cde87878787610cf5565b91509150610ceb81610db9565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d2c5750600090506003610db0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d80573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da957600060019250925050610db0565b9150600090505b94509492505050565b6000816004811115610dcd57610dcd6112cc565b03610dd55750565b6001816004811115610de957610de96112cc565b03610e365760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610e4a57610e4a6112cc565b03610e975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610eab57610eab6112cc565b03610f035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f6b57600080fd5b919050565b60008060408385031215610f8357600080fd5b610f8c83610f54565b946020939093013593505050565b600080600060608486031215610faf57600080fd5b610fb884610f54565b9250610fc660208501610f54565b9150604084013590509250925092565b600060208284031215610fe857600080fd5b610ff182610f54565b9392505050565b60008083601f84011261100a57600080fd5b50813567ffffffffffffffff81111561102257600080fd5b60208301915083602082850101111561103a57600080fd5b9250929050565b6000806000806040858703121561105757600080fd5b843567ffffffffffffffff8082111561106f57600080fd5b61107b88838901610ff8565b9096509450602087013591508082111561109457600080fd5b506110a187828801610ff8565b95989497509550505050565b600080600080600080600060e0888a0312156110c857600080fd5b6110d188610f54565b96506110df60208901610f54565b95506040880135945060608801359350608088013560ff8116811461110357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561113357600080fd5b61113c83610f54565b915061114a60208401610f54565b90509250929050565b8082018082111561028057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061119e57607f821691505b602082108103610c7957634e487b7160e01b600052602260045260246000fd5b601f821115610c5257600081815260208120601f850160051c810160208610156111e55750805b601f850160051c820191505b81811015611204578281556001016111f1565b505050505050565b67ffffffffffffffff83111561122457611224611174565b61123883611232835461118a565b836111be565b6000601f84116001811461126c57600085156112545750838201355b600019600387901b1c1916600186901b178355610401565b600083815260209020601f19861690835b8281101561129d578685013582556020948501946001909201910161127d565b50868210156112ba5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fc9fa7104ced2bd0804bef90105fb24ffacb00742d1be2d37a77174cd20fba2564736f6c63430008110033", + "devdoc": { + "details": "Anybody can mint as many tokens as they likeAnybody can burn anyone else's tokens", + "kind": "dev", + "methods": { + "DOMAIN_SEPARATOR()": { + "details": "See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant." + }, + "allowance(address,address)": { + "details": "See {IERC20-allowance}." + }, + "approve(address,uint256)": { + "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." + }, + "decreaseAllowance(address,uint256)": { + "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`." + }, + "increaseAllowance(address,uint256)": { + "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address." + }, + "nonces(address)": { + "details": "See {IERC20Permit-nonces}." + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "details": "See {IERC20Permit-permit}.", + "params": { + "_deadline": "The timestamp before which the signature must be submitted", + "_owner": "The account setting approval & signing the message", + "_r": "ECDSA signature r", + "_s": "ECDSA signature s", + "_spender": "The account receiving approval to spend owner's tokens", + "_v": "ECDSA signature v", + "_value": "The amount to set approval for" + } + }, + "totalSupply()": { + "details": "See {IERC20-totalSupply}." + }, + "transfer(address,uint256)": { + "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "notice": "Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712" + } + }, + "notice": "This token is ONLY useful for testing", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 15588, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_balances", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 15594, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_allowances", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 15596, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_totalSupply", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 15598, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_name", + "offset": 0, + "slot": "3", + "type": "t_string_storage" + }, + { + "astId": 15600, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_symbol", + "offset": 0, + "slot": "4", + "type": "t_string_storage" + }, + { + "astId": 15602, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_decimals", + "offset": 0, + "slot": "5", + "type": "t_uint8" + }, + { + "astId": 15611, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_nonces", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(Counter)3660_storage)" + }, + { + "astId": 15623, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_CACHED_DOMAIN_SEPARATOR", + "offset": 0, + "slot": "7", + "type": "t_bytes32" + }, + { + "astId": 15629, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "8", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(Counter)3660_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct Counters.Counter)", + "numberOfBytes": "32", + "value": "t_struct(Counter)3660_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Counter)3660_storage": { + "encoding": "inplace", + "label": "struct Counters.Counter", + "members": [ + { + "astId": 3659, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_value", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/TestWETH.json b/packages/deployments/contracts/deployments/fraxtal/TestWETH.json new file mode 100644 index 0000000000..e406a077fd --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/TestWETH.json @@ -0,0 +1,655 @@ +{ + "address": "0x025E75D8f799f362Ac4Fe136ddc197d3055fBA60", + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DOMAIN_SEPARATOR", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "_v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_newName", + "type": "string" + }, + { + "internalType": "string", + "name": "_newSymbol", + "type": "string" + } + ], + "name": "setDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "address", + "name": "_recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x1513f8acb0fcd850b452229161512fb49859f3e701128d6cf3c1b16269d6d9bc", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x025E75D8f799f362Ac4Fe136ddc197d3055fBA60", + "transactionIndex": 1, + "gasUsed": "1286795", + "logsBloom": "0x00000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000008000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000040000080000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000001020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2609464ee95bbbe3bc0b8fee525f9aadad49885d7b634b28269c98c5e7a2226b", + "transactionHash": "0x1513f8acb0fcd850b452229161512fb49859f3e701128d6cf3c1b16269d6d9bc", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2894883, + "transactionHash": "0x1513f8acb0fcd850b452229161512fb49859f3e701128d6cf3c1b16269d6d9bc", + "address": "0x025E75D8f799f362Ac4Fe136ddc197d3055fBA60", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "logIndex": 0, + "blockHash": "0x2609464ee95bbbe3bc0b8fee525f9aadad49885d7b634b28269c98c5e7a2226b" + } + ], + "blockNumber": 2894883, + "cumulativeGasUsed": "1337357", + "status": 1, + "byzantium": true + }, + "args": [ + "Test Wrapped Ether", + "TWETH" + ], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_newName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_newSymbol\",\"type\":\"string\"}],\"name\":\"setDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Anybody can mint as many tokens as they likeAnybody can burn anyone else's tokens\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address.\"},\"nonces(address)\":{\"details\":\"See {IERC20Permit-nonces}.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"See {IERC20Permit-permit}.\",\"params\":{\"_deadline\":\"The timestamp before which the signature must be submitted\",\"_owner\":\"The account setting approval & signing the message\",\"_r\":\"ECDSA signature r\",\"_s\":\"ECDSA signature s\",\"_spender\":\"The account receiving approval to spend owner's tokens\",\"_v\":\"ECDSA signature v\",\"_value\":\"The amount to set approval for\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"notice\":\"Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712\"}},\"notice\":\"This token is ONLY useful for testing\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/TestERC20.sol\":\"TestERC20\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n struct Counter {\\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n // this feature: see https://github.com/ethereum/solidity/issues/4637\\n uint256 _value; // default: 0\\n }\\n\\n function current(Counter storage counter) internal view returns (uint256) {\\n return counter._value;\\n }\\n\\n function increment(Counter storage counter) internal {\\n unchecked {\\n counter._value += 1;\\n }\\n }\\n\\n function decrement(Counter storage counter) internal {\\n uint256 value = counter._value;\\n require(value > 0, \\\"Counter: decrement overflow\\\");\\n unchecked {\\n counter._value = value - 1;\\n }\\n }\\n\\n function reset(Counter storage counter) internal {\\n counter._value = 0;\\n }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/OZERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n// This is modified from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\"\\n// Modifications were made to allow the name, hashed name, and cached\\n// domain separator to be internal\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\\\";\\nimport {EIP712} from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Counters.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * Implements ERC20 Permit extension allowing approvals to be made via\\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20\\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n *\\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\\n * the name (set to private).\\n *\\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\\n * These functions use the same implementation, with easier storage access.\\n */\\ncontract ERC20 is IERC20Metadata, IERC20Permit {\\n // See ERC20\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string internal _name; // made internal, need access\\n string internal _symbol; // made internal, need access\\n uint8 internal _decimals; // made internal, need access\\n\\n // See ERC20Permit\\n using Counters for Counters.Counter;\\n\\n mapping(address => Counters.Counter) private _nonces;\\n\\n // See EIP712\\n // Immutables used in EIP 712 structured data hashing & signing\\n // https://eips.ethereum.org/EIPS/eip-712\\n bytes32 private constant _PERMIT_TYPEHASH =\\n keccak256(\\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\");\\n bytes32 internal constant _TYPE_HASH =\\n keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n // made internal, need access\\n\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 internal _HASHED_NAME; // made internal, may change\\n bytes32 internal immutable _HASHED_VERSION; // made internal, need access\\n\\n /**\\n * @dev Initializes the {EIP712} domain separator using the `name` parameter,\\n * and setting `version` to `\\\"1\\\"`.\\n *\\n * It's a good idea to use the same `name` that is defined as the ERC20 token name.\\n */\\n constructor(\\n uint8 decimals_,\\n string memory name_,\\n string memory symbol_,\\n string memory version_\\n ) {\\n // ERC20\\n _name = name_;\\n _symbol = symbol_;\\n _decimals = decimals_;\\n\\n // EIP712\\n bytes32 hashedName = keccak256(bytes(name_));\\n bytes32 hashedVersion = keccak256(bytes(version_));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return _decimals;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n _transfer(msg.sender, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n _approve(msg.sender, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * Requirements:\\n *\\n * - `_sender` and `recipient` cannot be the zero address.\\n * - `_sender` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``_sender``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address _sender,\\n address _recipient,\\n uint256 _amount\\n ) public virtual override returns (bool) {\\n _spendAllowance(_sender, msg.sender, _amount);\\n _transfer(_sender, _recipient, _amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `_spender` cannot be the zero address.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\\n _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `_spender` cannot be the zero address.\\n * - `_spender` must have allowance for the caller of at least\\n * `_subtractedValue`.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\\n uint256 currentAllowance = allowance(msg.sender, _spender);\\n require(currentAllowance >= _subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves tokens `amount` from `_sender` to `_recipient`.\\n *\\n * This is internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `_sender` cannot be the zero address.\\n * - `_recipient` cannot be the zero address.\\n * - `_sender` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address _sender,\\n address _recipient,\\n uint256 _amount\\n ) internal virtual {\\n require(_sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(_recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(_sender, _recipient, _amount);\\n\\n uint256 fromBalance = _balances[_sender];\\n require(fromBalance >= _amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[_sender] = fromBalance - _amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[_recipient] += _amount;\\n }\\n\\n emit Transfer(_sender, _recipient, _amount);\\n\\n _afterTokenTransfer(_sender, _recipient, _amount);\\n }\\n\\n /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal virtual {\\n require(_account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), _account, _amount);\\n\\n _totalSupply += _amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[_account] += _amount;\\n }\\n emit Transfer(address(0), _account, _amount);\\n\\n _afterTokenTransfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal virtual {\\n require(_account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(_account, address(0), _amount);\\n\\n uint256 accountBalance = _balances[_account];\\n require(accountBalance >= _amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[_account] = accountBalance - _amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply\\n _totalSupply -= _amount;\\n }\\n\\n emit Transfer(_account, address(0), _amount);\\n\\n _afterTokenTransfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `_owner` cannot be the zero address.\\n * - `_spender` cannot be the zero address.\\n */\\n function _approve(\\n address _owner,\\n address _spender,\\n uint256 _amount\\n ) internal virtual {\\n require(_owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(_spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[_owner][_spender] = _amount;\\n emit Approval(_owner, _spender, _amount);\\n }\\n\\n /**\\n * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address _owner,\\n address _spender,\\n uint256 _amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(_owner, _spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= _amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(_owner, _spender, currentAllowance - _amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\\n * will be to transferred to `_to`.\\n * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\\n * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\\n * - `_from` and `_to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address _from,\\n address _to,\\n uint256 _amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address _from,\\n address _to,\\n uint256 _amount\\n ) internal virtual {}\\n\\n /**\\n * @dev See {IERC20Permit-permit}.\\n * @notice Sets approval from owner to spender to value\\n * as long as deadline has not passed\\n * by submitting a valid signature from owner\\n * Uses EIP 712 structured data hashing & signing\\n * https://eips.ethereum.org/EIPS/eip-712\\n * @param _owner The account setting approval & signing the message\\n * @param _spender The account receiving approval to spend owner's tokens\\n * @param _value The amount to set approval for\\n * @param _deadline The timestamp before which the signature must be submitted\\n * @param _v ECDSA signature v\\n * @param _r ECDSA signature r\\n * @param _s ECDSA signature s\\n */\\n function permit(\\n address _owner,\\n address _spender,\\n uint256 _value,\\n uint256 _deadline,\\n uint8 _v,\\n bytes32 _r,\\n bytes32 _s\\n ) public virtual override {\\n require(block.timestamp <= _deadline, \\\"ERC20Permit: expired deadline\\\");\\n\\n bytes32 _structHash = keccak256(\\n abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\\n );\\n\\n bytes32 _hash = _hashTypedDataV4(_structHash);\\n\\n address _signer = ECDSA.recover(_hash, _v, _r, _s);\\n require(_signer == _owner, \\\"ERC20Permit: invalid signature\\\");\\n\\n _approve(_owner, _spender, _value);\\n }\\n\\n /**\\n * @dev See {IERC20Permit-nonces}.\\n */\\n function nonces(address _owner) public view virtual override returns (uint256) {\\n return _nonces[_owner].current();\\n }\\n\\n /**\\n * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\\n * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\\n */\\n function DOMAIN_SEPARATOR() external view override returns (bytes32) {\\n return _domainSeparatorV4();\\n }\\n\\n /**\\n * @dev \\\"Consume a nonce\\\": return the current value and increment.\\n * @dev See {EIP712._buildDomainSeparator}\\n */\\n function _useNonce(address _owner) internal virtual returns (uint256 current) {\\n Counters.Counter storage nonce = _nonces[_owner];\\n current = nonce.current();\\n nonce.increment();\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n * @dev See {EIP712._buildDomainSeparator}\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n /**\\n * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\\n */\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) internal view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x7219667c651b2cbcbd1866667c5aa5fa1b1120a2fc111f24290c5ece3b3bba52\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n function burn(address _from, uint256 _amnt) external;\\n\\n function mint(address _to, uint256 _amnt) external;\\n\\n function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/test/TestERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20} from \\\"../core/connext/helpers/OZERC20.sol\\\";\\nimport {IERC20Metadata, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../core/connext/interfaces/IBridgeToken.sol\\\";\\n\\n/**\\n * @notice This token is ONLY useful for testing\\n * @dev Anybody can mint as many tokens as they like\\n * @dev Anybody can burn anyone else's tokens\\n */\\ncontract TestERC20 is ERC20, IBridgeToken {\\n constructor(string memory _name, string memory _symbol) ERC20(18, _name, _symbol, \\\"1\\\") {\\n _mint(msg.sender, 1000000 ether);\\n }\\n\\n // ============ Bridge functions ===============\\n function setDetails(string calldata _newName, string calldata _newSymbol) external override {\\n // Does nothing, in practice will update the details to match the hash in message\\n // not the autodeployed results\\n _name = _newName;\\n _symbol = _newSymbol;\\n }\\n\\n // ============ Token functions ===============\\n function balanceOf(address account) public view override(ERC20, IERC20) returns (uint256) {\\n return ERC20.balanceOf(account);\\n }\\n\\n function mint(address account, uint256 amount) external {\\n _mint(account, amount);\\n }\\n\\n function burn(address account, uint256 amount) external {\\n _burn(account, amount);\\n }\\n\\n function symbol() public view override(ERC20, IERC20Metadata) returns (string memory) {\\n return ERC20.symbol();\\n }\\n\\n function name() public view override(ERC20, IERC20Metadata) returns (string memory) {\\n return ERC20.name();\\n }\\n\\n function decimals() public view override(ERC20, IERC20Metadata) returns (uint8) {\\n return ERC20.decimals();\\n }\\n}\\n\",\"keccak256\":\"0xa902d583edf740f12ee31f72429456cc025ff9a8a2378fd6edd43d23eeb5158c\",\"license\":\"UNLICENSED\"}},\"version\":1}", + "bytecode": "0x60e06040523480156200001157600080fd5b50604051620017ee380380620017ee8339810160408190526200003491620002ba565b60128282604051806040016040528060018152602001603160f81b8152508260039081620000639190620003b2565b506004620000728382620003b2565b506005805460ff191660ff9590951694909417909355508051602091820120825192820192909220600883905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a0808601829052835180870382018152959092019092528351939092019290922060075552620001223369d3c21bcecceda10000006200012a565b5050620004a6565b6001600160a01b038216620001855760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200019991906200047e565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021d57600080fd5b81516001600160401b03808211156200023a576200023a620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002655762000265620001f5565b816040528381526020925086838588010111156200028257600080fd5b600091505b83821015620002a6578582018301518183018401529082019062000287565b600093810190920192909252949350505050565b60008060408385031215620002ce57600080fd5b82516001600160401b0380821115620002e657600080fd5b620002f4868387016200020b565b935060208501519150808211156200030b57600080fd5b506200031a858286016200020b565b9150509250929050565b600181811c908216806200033957607f821691505b6020821081036200035a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f057600081815260208120601f850160051c81016020861015620003895750805b601f850160051c820191505b81811015620003aa5782815560010162000395565b505050505050565b81516001600160401b03811115620003ce57620003ce620001f5565b620003e681620003df845462000324565b8462000360565b602080601f8311600181146200041e5760008415620004055750858301515b600019600386901b1c1916600185901b178555620003aa565b600085815260208120601f198616915b828110156200044f578886015182559484019460019091019084016200042e565b50858210156200046e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620004a057634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c051611318620004d66000396000610a0c01526000610979015260006109a301526113186000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610201578063a9059cbb14610214578063b7b090ee14610227578063d505accf1461023a578063dd62ed3e1461024d57600080fd5b806370a08231146101c05780637ecebe00146101d357806395d89b41146101e65780639dc29fac146101ee57600080fd5b8063313ce567116100de578063313ce567146101765780633644e51514610190578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610260565b6040516101259190610f06565b60405180910390f35b61014161013c366004610f70565b61026f565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610f9a565b610286565b61017e6102a8565b60405160ff9091168152602001610125565b6101556102b6565b6101416101a6366004610f70565b6102c0565b6101be6101b9366004610f70565b6102fc565b005b6101556101ce366004610fd6565b61030a565b6101556101e1366004610fd6565b610328565b610118610346565b6101be6101fc366004610f70565b610350565b61014161020f366004610f70565b61035a565b610141610222366004610f70565b6103d9565b6101be610235366004611041565b6103e6565b6101be6102483660046110ad565b610408565b61015561025b366004611120565b61056c565b606061026a610597565b905090565b600061027c338484610629565b5060015b92915050565b600061029384338461074e565b61029e8484846107c8565b5060019392505050565b600061026a60055460ff1690565b600061026a61096c565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161027c9185906102f7908690611153565b610629565b6103068282610a5a565b5050565b6001600160a01b038116600090815260208190526040812054610280565b6001600160a01b038116600090815260066020526040812054610280565b606061026a610b19565b6103068282610b28565b600080610367338561056c565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029e3385858403610629565b600061027c3384846107c8565b60036103f384868361120c565b50600461040182848361120c565b5050505050565b834211156104585760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104878c610c57565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e282610c7f565b905060006104f282878787610ccd565b9050896001600160a01b0316816001600160a01b0316146105555760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b6105608a8a8a610629565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546105a69061118a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061118a565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b6001600160a01b03831661068b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061075a848461056c565b905060001981146107c257818110156107b55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b6107c28484848403610629565b50505050565b6001600160a01b03831661082c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156109065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107c2565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109c557507f000000000000000000000000000000000000000000000000000000000000000046145b156109d1575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c3565b8060026000828254610ac29190611153565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060600480546105a69061118a565b6001600160a01b038216610b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c3565b6001600160a01b03821660009081526020819052604090205481811015610bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c3565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610741565b505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b6000610280610c8c61096c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610cde87878787610cf5565b91509150610ceb81610db9565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d2c5750600090506003610db0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d80573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da957600060019250925050610db0565b9150600090505b94509492505050565b6000816004811115610dcd57610dcd6112cc565b03610dd55750565b6001816004811115610de957610de96112cc565b03610e365760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610e4a57610e4a6112cc565b03610e975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610eab57610eab6112cc565b03610f035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f6b57600080fd5b919050565b60008060408385031215610f8357600080fd5b610f8c83610f54565b946020939093013593505050565b600080600060608486031215610faf57600080fd5b610fb884610f54565b9250610fc660208501610f54565b9150604084013590509250925092565b600060208284031215610fe857600080fd5b610ff182610f54565b9392505050565b60008083601f84011261100a57600080fd5b50813567ffffffffffffffff81111561102257600080fd5b60208301915083602082850101111561103a57600080fd5b9250929050565b6000806000806040858703121561105757600080fd5b843567ffffffffffffffff8082111561106f57600080fd5b61107b88838901610ff8565b9096509450602087013591508082111561109457600080fd5b506110a187828801610ff8565b95989497509550505050565b600080600080600080600060e0888a0312156110c857600080fd5b6110d188610f54565b96506110df60208901610f54565b95506040880135945060608801359350608088013560ff8116811461110357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561113357600080fd5b61113c83610f54565b915061114a60208401610f54565b90509250929050565b8082018082111561028057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061119e57607f821691505b602082108103610c7957634e487b7160e01b600052602260045260246000fd5b601f821115610c5257600081815260208120601f850160051c810160208610156111e55750805b601f850160051c820191505b81811015611204578281556001016111f1565b505050505050565b67ffffffffffffffff83111561122457611224611174565b61123883611232835461118a565b836111be565b6000601f84116001811461126c57600085156112545750838201355b600019600387901b1c1916600186901b178355610401565b600083815260209020601f19861690835b8281101561129d578685013582556020948501946001909201910161127d565b50868210156112ba5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fc9fa7104ced2bd0804bef90105fb24ffacb00742d1be2d37a77174cd20fba2564736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d714610201578063a9059cbb14610214578063b7b090ee14610227578063d505accf1461023a578063dd62ed3e1461024d57600080fd5b806370a08231146101c05780637ecebe00146101d357806395d89b41146101e65780639dc29fac146101ee57600080fd5b8063313ce567116100de578063313ce567146101765780633644e51514610190578063395093511461019857806340c10f19146101ab57600080fd5b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015157806323b872dd14610163575b600080fd5b610118610260565b6040516101259190610f06565b60405180910390f35b61014161013c366004610f70565b61026f565b6040519015158152602001610125565b6002545b604051908152602001610125565b610141610171366004610f9a565b610286565b61017e6102a8565b60405160ff9091168152602001610125565b6101556102b6565b6101416101a6366004610f70565b6102c0565b6101be6101b9366004610f70565b6102fc565b005b6101556101ce366004610fd6565b61030a565b6101556101e1366004610fd6565b610328565b610118610346565b6101be6101fc366004610f70565b610350565b61014161020f366004610f70565b61035a565b610141610222366004610f70565b6103d9565b6101be610235366004611041565b6103e6565b6101be6102483660046110ad565b610408565b61015561025b366004611120565b61056c565b606061026a610597565b905090565b600061027c338484610629565b5060015b92915050565b600061029384338461074e565b61029e8484846107c8565b5060019392505050565b600061026a60055460ff1690565b600061026a61096c565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161027c9185906102f7908690611153565b610629565b6103068282610a5a565b5050565b6001600160a01b038116600090815260208190526040812054610280565b6001600160a01b038116600090815260066020526040812054610280565b606061026a610b19565b6103068282610b28565b600080610367338561056c565b9050828110156103cc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61029e3385858403610629565b600061027c3384846107c8565b60036103f384868361120c565b50600461040182848361120c565b5050505050565b834211156104585760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016103c3565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104878c610c57565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006104e282610c7f565b905060006104f282878787610ccd565b9050896001600160a01b0316816001600160a01b0316146105555760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016103c3565b6105608a8a8a610629565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546105a69061118a565b80601f01602080910402602001604051908101604052809291908181526020018280546105d29061118a565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b6001600160a01b03831661068b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103c3565b6001600160a01b0382166106ec5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103c3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061075a848461056c565b905060001981146107c257818110156107b55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016103c3565b6107c28484848403610629565b50505050565b6001600160a01b03831661082c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103c3565b6001600160a01b03821661088e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103c3565b6001600160a01b038316600090815260208190526040902054818110156109065760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016103c3565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107c2565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156109c557507f000000000000000000000000000000000000000000000000000000000000000046145b156109d1575060075490565b50600854604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f602080830191909152818301939093527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a0808301919091528251808303909101815260c0909101909152805191012090565b6001600160a01b038216610ab05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103c3565b8060026000828254610ac29190611153565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6060600480546105a69061118a565b6001600160a01b038216610b885760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016103c3565b6001600160a01b03821660009081526020819052604090205481811015610bfc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016103c3565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610741565b505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b6000610280610c8c61096c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610cde87878787610cf5565b91509150610ceb81610db9565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610d2c5750600090506003610db0565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610d80573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610da957600060019250925050610db0565b9150600090505b94509492505050565b6000816004811115610dcd57610dcd6112cc565b03610dd55750565b6001816004811115610de957610de96112cc565b03610e365760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103c3565b6002816004811115610e4a57610e4a6112cc565b03610e975760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103c3565b6003816004811115610eab57610eab6112cc565b03610f035760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103c3565b50565b600060208083528351808285015260005b81811015610f3357858101830151858201604001528201610f17565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610f6b57600080fd5b919050565b60008060408385031215610f8357600080fd5b610f8c83610f54565b946020939093013593505050565b600080600060608486031215610faf57600080fd5b610fb884610f54565b9250610fc660208501610f54565b9150604084013590509250925092565b600060208284031215610fe857600080fd5b610ff182610f54565b9392505050565b60008083601f84011261100a57600080fd5b50813567ffffffffffffffff81111561102257600080fd5b60208301915083602082850101111561103a57600080fd5b9250929050565b6000806000806040858703121561105757600080fd5b843567ffffffffffffffff8082111561106f57600080fd5b61107b88838901610ff8565b9096509450602087013591508082111561109457600080fd5b506110a187828801610ff8565b95989497509550505050565b600080600080600080600060e0888a0312156110c857600080fd5b6110d188610f54565b96506110df60208901610f54565b95506040880135945060608801359350608088013560ff8116811461110357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561113357600080fd5b61113c83610f54565b915061114a60208401610f54565b90509250929050565b8082018082111561028057634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061119e57607f821691505b602082108103610c7957634e487b7160e01b600052602260045260246000fd5b601f821115610c5257600081815260208120601f850160051c810160208610156111e55750805b601f850160051c820191505b81811015611204578281556001016111f1565b505050505050565b67ffffffffffffffff83111561122457611224611174565b61123883611232835461118a565b836111be565b6000601f84116001811461126c57600085156112545750838201355b600019600387901b1c1916600186901b178355610401565b600083815260209020601f19861690835b8281101561129d578685013582556020948501946001909201910161127d565b50868210156112ba5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220fc9fa7104ced2bd0804bef90105fb24ffacb00742d1be2d37a77174cd20fba2564736f6c63430008110033", + "devdoc": { + "details": "Anybody can mint as many tokens as they likeAnybody can burn anyone else's tokens", + "kind": "dev", + "methods": { + "DOMAIN_SEPARATOR()": { + "details": "See {IERC20Permit-DOMAIN_SEPARATOR}. This is ALWAYS calculated at runtime because the token name is mutable, not constant." + }, + "allowance(address,address)": { + "details": "See {IERC20-allowance}." + }, + "approve(address,uint256)": { + "details": "See {IERC20-approve}. NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." + }, + "decreaseAllowance(address,uint256)": { + "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address. - `_spender` must have allowance for the caller of at least `_subtractedValue`." + }, + "increaseAllowance(address,uint256)": { + "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `_spender` cannot be the zero address." + }, + "nonces(address)": { + "details": "See {IERC20Permit-nonces}." + }, + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "details": "See {IERC20Permit-permit}.", + "params": { + "_deadline": "The timestamp before which the signature must be submitted", + "_owner": "The account setting approval & signing the message", + "_r": "ECDSA signature r", + "_s": "ECDSA signature s", + "_spender": "The account receiving approval to spend owner's tokens", + "_v": "ECDSA signature v", + "_value": "The amount to set approval for" + } + }, + "totalSupply()": { + "details": "See {IERC20-totalSupply}." + }, + "transfer(address,uint256)": { + "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `_sender` and `recipient` cannot be the zero address. - `_sender` must have a balance of at least `amount`. - the caller must have allowance for ``_sender``'s tokens of at least `amount`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": { + "notice": "Sets approval from owner to spender to value as long as deadline has not passed by submitting a valid signature from owner Uses EIP 712 structured data hashing & signing https://eips.ethereum.org/EIPS/eip-712" + } + }, + "notice": "This token is ONLY useful for testing", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 15588, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_balances", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 15594, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_allowances", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 15596, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_totalSupply", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 15598, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_name", + "offset": 0, + "slot": "3", + "type": "t_string_storage" + }, + { + "astId": 15600, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_symbol", + "offset": 0, + "slot": "4", + "type": "t_string_storage" + }, + { + "astId": 15602, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_decimals", + "offset": 0, + "slot": "5", + "type": "t_uint8" + }, + { + "astId": 15611, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_nonces", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(Counter)3660_storage)" + }, + { + "astId": 15623, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_CACHED_DOMAIN_SEPARATOR", + "offset": 0, + "slot": "7", + "type": "t_bytes32" + }, + { + "astId": 15629, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "8", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(Counter)3660_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct Counters.Counter)", + "numberOfBytes": "32", + "value": "t_struct(Counter)3660_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Counter)3660_storage": { + "encoding": "inplace", + "label": "struct Counters.Counter", + "members": [ + { + "astId": 3659, + "contract": "contracts/test/TestERC20.sol:TestERC20", + "label": "_value", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/TokenFacetStaging.json b/packages/deployments/contracts/deployments/fraxtal/TokenFacetStaging.json new file mode 100644 index 0000000000..116532b4b2 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/TokenFacetStaging.json @@ -0,0 +1,1798 @@ +{ + "address": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", + "abi": [ + { + "inputs": [], + "name": "AssetLogic__getConfig_notRegistered", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "BaseConnextFacet__whenNotPaused_paused", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_alreadyAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badBurn", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__addAssetId_badMint", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_invalidParams", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_notAdded", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__removeAssetId_remainsCustodied", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__setupAsset_representationListed", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_localNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_notApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TokenFacet__updateDetails_onlyRemote", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "adoptedAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "localAsset", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "AssetRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cap", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "LiquidityCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "canonicalId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "swapPool", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "StableSwapAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "representation", + "type": "address" + } + ], + "name": "TokenDeployed", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "addStableSwapPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_adopted", + "type": "address" + } + ], + "name": "adoptedToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "adoptedToLocalExternalPools", + "outputs": [ + { + "internalType": "contract IStableSwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "approvedAssets", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToAdopted", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + } + ], + "name": "canonicalToRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + } + ], + "name": "getCustodiedAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_id", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + } + ], + "name": "getLocalAndAdoptedToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_candidate", + "type": "address" + } + ], + "name": "getTokenId", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_key", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "removeAssetId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_representation", + "type": "address" + } + ], + "name": "representationToCanonical", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "_canonicalDecimals", + "type": "uint8" + }, + { + "internalType": "string", + "name": "_representationName", + "type": "string" + }, + { + "internalType": "string", + "name": "_representationSymbol", + "type": "string" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_cap", + "type": "uint256" + } + ], + "name": "setupAsset", + "outputs": [ + { + "internalType": "address", + "name": "_local", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "address", + "name": "_representation", + "type": "address" + }, + { + "internalType": "address", + "name": "_adoptedAssetId", + "type": "address" + }, + { + "internalType": "address", + "name": "_stableSwapPool", + "type": "address" + } + ], + "name": "setupAssetWithDeployedRepresentation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "updateDetails", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "internalType": "bytes32", + "name": "id", + "type": "bytes32" + } + ], + "internalType": "struct TokenId", + "name": "_canonical", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "updateLiquidityCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xb687ae6fd3fa9333e179b0196ec224e5c12d8e520d81f6a6a4eb9179f2e0ff6a", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "3269047", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x4ca6f1fd7d43cc5b70afe1161b2494e1557212c3bf3f382880e88d9636ec8291", + "transactionHash": "0xb687ae6fd3fa9333e179b0196ec224e5c12d8e520d81f6a6a4eb9179f2e0ff6a", + "logs": [], + "blockNumber": 2894777, + "cumulativeGasUsed": "3344633", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AssetLogic__getConfig_notRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getAdoptedAsset_assetNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__getApprovedCanonicalId_notAllowlisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__nonXCallReentrant_reentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseConnextFacet__whenNotPaused_paused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__addAssetId_alreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__addAssetId_badBurn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__addAssetId_badMint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__removeAssetId_invalidParams\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__removeAssetId_notAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__removeAssetId_remainsCustodied\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setLiquidityCap_notCanonicalDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setupAsset_invalidCanonicalConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__setupAsset_representationListed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__updateDetails_localNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__updateDetails_notApproved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenFacet__updateDetails_onlyRemote\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"adoptedAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localAsset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AssetAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AssetRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"LiquidityCapUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"swapPool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"StableSwapAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"representation\",\"type\":\"address\"}],\"name\":\"TokenDeployed\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"}],\"name\":\"addStableSwapPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_adopted\",\"type\":\"address\"}],\"name\":\"adoptedToCanonical\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"adoptedToLocalExternalPools\",\"outputs\":[{\"internalType\":\"contract IStableSwap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"adoptedToLocalExternalPools\",\"outputs\":[{\"internalType\":\"contract IStableSwap\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"approvedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"approvedAssets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"canonicalToAdopted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"canonicalToAdopted\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"canonicalToRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"}],\"name\":\"canonicalToRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"}],\"name\":\"getCustodiedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_id\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"_domain\",\"type\":\"uint32\"}],\"name\":\"getLocalAndAdoptedToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_candidate\",\"type\":\"address\"}],\"name\":\"getTokenId\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"}],\"name\":\"removeAssetId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_key\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"}],\"name\":\"removeAssetId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"}],\"name\":\"representationToCanonical\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"_canonicalDecimals\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_representationName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_representationSymbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_cap\",\"type\":\"uint256\"}],\"name\":\"setupAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_local\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_representation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_adoptedAssetId\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stableSwapPool\",\"type\":\"address\"}],\"name\":\"setupAssetWithDeployedRepresentation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"updateDetails\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"domain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"id\",\"type\":\"bytes32\"}],\"internalType\":\"struct TokenId\",\"name\":\"_canonical\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_updated\",\"type\":\"uint256\"}],\"name\":\"updateLiquidityCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AssetAdded(bytes32,bytes32,uint32,address,address,address)\":{\"params\":{\"adoptedAsset\":\"- The address of the adopted (user-expected) asset\",\"caller\":\"- The account that called the function\",\"canonicalId\":\"- The canonical identifier of the token the local <> adopted AMM is for\",\"domain\":\"- The domain of the canonical token for the local <> adopted amm\",\"key\":\"- The key in the mapping (hash of canonical id and domain)\",\"localAsset\":\"- The address of the local asset\"}},\"AssetRemoved(bytes32,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"key\":\"- The hash of the canonical identifier and domain of the token removed\"}},\"LiquidityCapUpdated(bytes32,bytes32,uint32,uint256,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"canonicalId\":\"- The canonical identifier of the token the local <> adopted AMM is for\",\"cap\":\"- The newly enforced liquidity cap (if it is 0, no cap is enforced)\",\"domain\":\"- The domain of the canonical token for the local <> adopted amm\",\"key\":\"- The key in the mapping (hash of canonical id and domain)\"}},\"StableSwapAdded(bytes32,bytes32,uint32,address,address)\":{\"params\":{\"caller\":\"- The account that called the function\",\"canonicalId\":\"- The canonical identifier of the token the local <> adopted AMM is for\",\"domain\":\"- The domain of the canonical token for the local <> adopted amm\",\"key\":\"- The key in the mapping (hash of canonical id and domain)\",\"swapPool\":\"- The address of the AMM\"}},\"TokenDeployed(uint32,bytes32,address)\":{\"params\":{\"domain\":\"the domain of the chain where the canonical asset is deployed\",\"id\":\"the bytes32 address of the canonical token contract\",\"representation\":\"the address of the newly locally deployed representation contract\"}}},\"kind\":\"dev\",\"methods\":{\"addStableSwapPool((uint32,bytes32),address)\":{\"details\":\"Must pass in the _canonical information so it can be emitted in event\"},\"removeAssetId((uint32,bytes32),address,address)\":{\"params\":{\"_adoptedAssetId\":\"- Corresponding adopted asset to remove\",\"_canonical\":\"- The canonical id and domain to remove\",\"_representation\":\"- Corresponding representation asset to remove\"}},\"removeAssetId(bytes32,address,address)\":{\"params\":{\"_adoptedAssetId\":\"- Corresponding adopted asset to remove\",\"_key\":\"- The hash of the canonical id and domain to remove (mapping key)\",\"_representation\":\"- Corresponding representation asset to remove\"}},\"setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)\":{\"details\":\"When allowlisting the canonical asset, all representational assets would be allowlisted as well. In the event you have a different adopted asset (i.e. PoS USDC on polygon), you should *not* allowlist the adopted asset. The stable swap pool address used should allow you to swap between the local <> adopted asset. If a representation has been deployed at any point, `setupAssetWithDeployedRepresentation` should be used instead. The following can only be added on *REMOTE* domains: - `_adoptedAssetId` - `_stableSwapPool` Whereas the `_cap` can only be added on the canonical domain\",\"params\":{\"_adoptedAssetId\":\"- The used asset id for this domain (e.g. PoS USDC for polygon)\",\"_canonical\":\"- The canonical asset to add by id and domain. All representations will be allowlisted as well\",\"_canonicalDecimals\":\"- The decimals of the canonical asset (will be used for deployed representation)\",\"_representationName\":\"- The name to be used for the deployed asset\",\"_representationSymbol\":\"- The symbol used for the deployed asset\",\"_stableSwapPool\":\"- The address of the local stableswap pool, if it exists.\"}},\"setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)\":{\"details\":\"This function does very minimal checks to ensure the correct `_representation` token is used. The only enforced checks are: - Bridge can mint, and balance of bridge will increase - Bridge can burn, and balance of bridge will decrease However, there are many things that must be checked manually to avoid enrolling a bad representation: - decimals must always be equal to canonical decimals - regular `mint`, `burn`, `ERC20` functionality could be implemented improperly - the required interface functions (see `IBridgeToken`) may not be implemented - upgradeability could interfere with required functionality Using this method allows admins to override existing local tokens, and should be used carefully.\",\"params\":{\"_adoptedAssetId\":\"- The used asset id for this domain (e.g. PoS USDC for polygon)\",\"_canonical\":\"- The canonical asset to add by id and domain. All representations will be whitelisted as well\",\"_representation\":\"- The address of the representative asset\",\"_stableSwapPool\":\"- The address of the local stableswap pool, if it exists.\"}},\"updateDetails((uint32,bytes32),string,string)\":{\"params\":{\"_canonical\":\"- The canonical id and domain to remove\",\"_name\":\"- The new name\",\"_symbol\":\"- The new symbol\"}},\"updateLiquidityCap((uint32,bytes32),uint256)\":{\"details\":\"Must pass in the _canonical information so it can be emitted in event\"}},\"version\":1},\"userdoc\":{\"events\":{\"AssetAdded(bytes32,bytes32,uint32,address,address,address)\":{\"notice\":\"Emitted when a new asset is added\"},\"AssetRemoved(bytes32,address)\":{\"notice\":\"Emitted when an asset is removed from allowlists\"},\"LiquidityCapUpdated(bytes32,bytes32,uint32,uint256,address)\":{\"notice\":\"Emitted when a liquidity cap is updated\"},\"StableSwapAdded(bytes32,bytes32,uint32,address,address)\":{\"notice\":\"Emitted when a new stable-swap AMM is added for the local <> adopted token\"},\"TokenDeployed(uint32,bytes32,address)\":{\"notice\":\"emitted when a representation token contract is deployed\"}},\"kind\":\"user\",\"methods\":{\"addStableSwapPool((uint32,bytes32),address)\":{\"notice\":\"Adds a stable swap pool for the local <> adopted asset.\"},\"removeAssetId((uint32,bytes32),address,address)\":{\"notice\":\"Used to remove assets from the allowlist\"},\"removeAssetId(bytes32,address,address)\":{\"notice\":\"Used to remove assets from the allowlist\"},\"setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)\":{\"notice\":\"Used to add supported assets. This is an admin only function\"},\"setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)\":{\"notice\":\"Used to add supported assets, without deploying a unique representation asset, and instead using what admins have provided. This is an admin only function\"},\"updateDetails((uint32,bytes32),string,string)\":{\"notice\":\"Used to update the name and symbol of a local token\"},\"updateLiquidityCap((uint32,bytes32),uint256)\":{\"notice\":\"Adds a stable swap pool for the local <> adopted asset.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/facets/TokenFacet.sol\":\"TokenFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\",\"keccak256\":\"0x687142c633b33037c3137b6bfeef848a44eb1ef83fb5fdb59a3affdf28a46516\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Counters.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Counters\\n * @author Matt Condon (@shrugs)\\n * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number\\n * of elements in a mapping, issuing ERC721 ids, or counting request ids.\\n *\\n * Include with `using Counters for Counters.Counter;`\\n */\\nlibrary Counters {\\n struct Counter {\\n // This variable should never be directly accessed by users of the library: interactions must be restricted to\\n // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add\\n // this feature: see https://github.com/ethereum/solidity/issues/4637\\n uint256 _value; // default: 0\\n }\\n\\n function current(Counter storage counter) internal view returns (uint256) {\\n return counter._value;\\n }\\n\\n function increment(Counter storage counter) internal {\\n unchecked {\\n counter._value += 1;\\n }\\n }\\n\\n function decrement(Counter storage counter) internal {\\n uint256 value = counter._value;\\n require(value > 0, \\\"Counter: decrement overflow\\\");\\n unchecked {\\n counter._value = value - 1;\\n }\\n }\\n\\n function reset(Counter storage counter) internal {\\n counter._value = 0;\\n }\\n}\\n\",\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/EIP712.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./ECDSA.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712 {\\n /* solhint-disable var-name-mixedcase */\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 private immutable _HASHED_NAME;\\n bytes32 private immutable _HASHED_VERSION;\\n bytes32 private immutable _TYPE_HASH;\\n\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n constructor(string memory name, string memory version) {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n bytes32 typeHash = keccak256(\\n \\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\"\\n );\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n _TYPE_HASH = typeHash;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) private view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x948d8b2d18f38141ec78c5229d770d950ebc781ed3f44cc9e3ccbb9fded5846a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/facets/BaseConnextFacet.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {TransferInfo, AppStorage, Role} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {Constants} from \\\"../libraries/Constants.sol\\\";\\n\\ncontract BaseConnextFacet {\\n AppStorage internal s;\\n\\n // ========== Custom Errors ===========\\n\\n error BaseConnextFacet__onlyOwner_notOwner();\\n error BaseConnextFacet__onlyProposed_notProposedOwner();\\n error BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n error BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n error BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n error BaseConnextFacet__whenNotPaused_paused();\\n error BaseConnextFacet__nonReentrant_reentrantCall();\\n error BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n error BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n error BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n\\n // ============ Modifiers ============\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._status == Constants.ENTERED) revert BaseConnextFacet__nonReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._status = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._status = Constants.NOT_ENTERED;\\n }\\n\\n modifier nonXCallReentrant() {\\n // On the first call to nonReentrant, _notEntered will be true\\n if (s._xcallStatus == Constants.ENTERED) revert BaseConnextFacet__nonXCallReentrant_reentrantCall();\\n\\n // Any calls to nonReentrant after this point will fail\\n s._xcallStatus = Constants.ENTERED;\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n s._xcallStatus = Constants.NOT_ENTERED;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (LibDiamond.contractOwner() != msg.sender) revert BaseConnextFacet__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (s._proposed != msg.sender) revert BaseConnextFacet__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and router role.\\n */\\n modifier onlyOwnerOrRouter() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.RouterAdmin)\\n revert BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and watcher role.\\n */\\n modifier onlyOwnerOrWatcher() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Watcher)\\n revert BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner and admin role.\\n */\\n modifier onlyOwnerOrAdmin() {\\n if (LibDiamond.contractOwner() != msg.sender && s.roles[msg.sender] != Role.Admin)\\n revert BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin();\\n _;\\n }\\n\\n /**\\n * @notice Throws if all functionality is paused\\n */\\n modifier whenNotPaused() {\\n if (s._paused) revert BaseConnextFacet__whenNotPaused_paused();\\n _;\\n }\\n\\n // ============ Internal functions ============\\n /**\\n * @notice Indicates if the router allowlist has been removed\\n */\\n function _isRouterAllowlistRemoved() internal view returns (bool) {\\n return LibDiamond.contractOwner() == address(0) || s._routerAllowlistRemoved;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getAdoptedAsset(bytes32 _key) internal view returns (address) {\\n address adopted = AssetLogic.getConfig(_key).adopted;\\n if (adopted == address(0)) {\\n revert BaseConnextFacet__getAdoptedAsset_assetNotFound();\\n }\\n return adopted;\\n }\\n\\n /**\\n * @notice Returns the adopted assets for given canonical information\\n */\\n function _getRepresentationAsset(bytes32 _key) internal view returns (address) {\\n address representation = AssetLogic.getConfig(_key).representation;\\n // If this is address(0), then there is no mintable token for this asset on this\\n // domain\\n return representation;\\n }\\n\\n /**\\n * @notice Calculates a transferId\\n */\\n function _calculateTransferId(TransferInfo memory _params) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_params));\\n }\\n\\n /**\\n * @notice Internal utility function that combines\\n * `_origin` and `_nonce`.\\n * @dev Both origin and nonce should be less than 2^32 - 1\\n * @param _origin Domain of chain where the transfer originated\\n * @param _nonce The unique identifier for the message from origin to destination\\n * @return Returns (`_origin` << 32) & `_nonce`\\n */\\n function _originAndNonce(uint32 _origin, uint32 _nonce) internal pure returns (uint64) {\\n return (uint64(_origin) << 32) | _nonce;\\n }\\n\\n function _getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address) {\\n return AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n }\\n\\n function _getCanonicalTokenId(address _candidate) internal view returns (TokenId memory) {\\n return AssetLogic.getCanonicalTokenId(_candidate, s);\\n }\\n\\n function _getLocalAndAdoptedToken(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain\\n ) internal view returns (address, address) {\\n address _local = AssetLogic.getLocalAsset(_key, _id, _domain, s);\\n address _adopted = _getAdoptedAsset(_key);\\n return (_local, _adopted);\\n }\\n\\n function _isLocalOrigin(address _token) internal view returns (bool) {\\n return AssetLogic.isLocalOrigin(_token, s);\\n }\\n\\n function _getApprovedCanonicalId(address _candidate) internal view returns (TokenId memory, bytes32) {\\n TokenId memory _canonical = _getCanonicalTokenId(_candidate);\\n bytes32 _key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n if (!AssetLogic.getConfig(_key).approval) {\\n revert BaseConnextFacet__getApprovedCanonicalId_notAllowlisted();\\n }\\n return (_canonical, _key);\\n }\\n}\\n\",\"keccak256\":\"0x94069cb811ec1c79b2c31080a6a299797684f43a9e7df7ef034a58942433b98c\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/facets/TokenFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/interfaces/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\nimport {AssetLogic} from \\\"../libraries/AssetLogic.sol\\\";\\nimport {TokenConfig} from \\\"../libraries/LibConnextStorage.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\nimport {BridgeToken} from \\\"../helpers/BridgeToken.sol\\\";\\n\\nimport {BaseConnextFacet} from \\\"./BaseConnextFacet.sol\\\";\\n\\ncontract TokenFacet is BaseConnextFacet {\\n // ========== Custom Errors ===========\\n error TokenFacet__addAssetId_alreadyAdded();\\n error TokenFacet__addAssetId_badMint();\\n error TokenFacet__addAssetId_badBurn();\\n error TokenFacet__removeAssetId_notAdded();\\n error TokenFacet__removeAssetId_invalidParams();\\n error TokenFacet__removeAssetId_remainsCustodied();\\n error TokenFacet__updateDetails_localNotFound();\\n error TokenFacet__updateDetails_onlyRemote();\\n error TokenFacet__updateDetails_notApproved();\\n error TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical();\\n error TokenFacet__setupAsset_representationListed();\\n error TokenFacet__setupAsset_invalidCanonicalConfiguration();\\n error TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation();\\n error TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain();\\n error TokenFacet__setLiquidityCap_notCanonicalDomain();\\n\\n // ============ Events ============\\n\\n /**\\n * @notice emitted when a representation token contract is deployed\\n * @param domain the domain of the chain where the canonical asset is deployed\\n * @param id the bytes32 address of the canonical token contract\\n * @param representation the address of the newly locally deployed representation contract\\n */\\n event TokenDeployed(uint32 indexed domain, bytes32 indexed id, address indexed representation);\\n\\n /**\\n * @notice Emitted when a new stable-swap AMM is added for the local <> adopted token\\n * @param key - The key in the mapping (hash of canonical id and domain)\\n * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\\n * @param domain - The domain of the canonical token for the local <> adopted amm\\n * @param swapPool - The address of the AMM\\n * @param caller - The account that called the function\\n */\\n event StableSwapAdded(\\n bytes32 indexed key,\\n bytes32 indexed canonicalId,\\n uint32 indexed domain,\\n address swapPool,\\n address caller\\n );\\n\\n /**\\n * @notice Emitted when a liquidity cap is updated\\n * @param key - The key in the mapping (hash of canonical id and domain)\\n * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\\n * @param domain - The domain of the canonical token for the local <> adopted amm\\n * @param cap - The newly enforced liquidity cap (if it is 0, no cap is enforced)\\n * @param caller - The account that called the function\\n */\\n event LiquidityCapUpdated(\\n bytes32 indexed key,\\n bytes32 indexed canonicalId,\\n uint32 indexed domain,\\n uint256 cap,\\n address caller\\n );\\n\\n /**\\n * @notice Emitted when a new asset is added\\n * @param key - The key in the mapping (hash of canonical id and domain)\\n * @param canonicalId - The canonical identifier of the token the local <> adopted AMM is for\\n * @param domain - The domain of the canonical token for the local <> adopted amm\\n * @param adoptedAsset - The address of the adopted (user-expected) asset\\n * @param localAsset - The address of the local asset\\n * @param caller - The account that called the function\\n */\\n event AssetAdded(\\n bytes32 indexed key,\\n bytes32 indexed canonicalId,\\n uint32 indexed domain,\\n address adoptedAsset,\\n address localAsset,\\n address caller\\n );\\n\\n /**\\n * @notice Emitted when an asset is removed from allowlists\\n * @param key - The hash of the canonical identifier and domain of the token removed\\n * @param caller - The account that called the function\\n */\\n event AssetRemoved(bytes32 indexed key, address caller);\\n\\n // ============ Getters ============\\n\\n function canonicalToAdopted(bytes32 _key) public view returns (address) {\\n return _getAdoptedAsset(_key);\\n }\\n\\n function canonicalToAdopted(TokenId calldata _canonical) public view returns (address) {\\n return _getAdoptedAsset(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\\n }\\n\\n function adoptedToCanonical(address _adopted) public view returns (TokenId memory) {\\n TokenId memory canonical = TokenId(s.adoptedToCanonical[_adopted].domain, s.adoptedToCanonical[_adopted].id);\\n return canonical;\\n }\\n\\n function canonicalToRepresentation(bytes32 _key) public view returns (address) {\\n return _getRepresentationAsset(_key);\\n }\\n\\n function canonicalToRepresentation(TokenId calldata _canonical) public view returns (address) {\\n return _getRepresentationAsset(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\\n }\\n\\n function representationToCanonical(address _representation) public view returns (TokenId memory) {\\n TokenId memory canonical = TokenId(\\n s.representationToCanonical[_representation].domain,\\n s.representationToCanonical[_representation].id\\n );\\n return canonical;\\n }\\n\\n function getTokenId(address _candidate) public view returns (TokenId memory) {\\n return _getCanonicalTokenId(_candidate);\\n }\\n\\n function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) public view returns (address, address) {\\n return _getLocalAndAdoptedToken(AssetLogic.calculateCanonicalHash(_id, _domain), _id, _domain);\\n }\\n\\n function approvedAssets(bytes32 _key) public view returns (bool) {\\n return s.tokenConfigs[_key].approval;\\n }\\n\\n function approvedAssets(TokenId calldata _canonical) public view returns (bool) {\\n return approvedAssets(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\\n }\\n\\n function adoptedToLocalExternalPools(bytes32 _key) public view returns (IStableSwap) {\\n return IStableSwap(s.tokenConfigs[_key].adoptedToLocalExternalPools);\\n }\\n\\n function adoptedToLocalExternalPools(TokenId calldata _canonical) public view returns (IStableSwap) {\\n return adoptedToLocalExternalPools(AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain));\\n }\\n\\n function getCustodiedAmount(bytes32 _key) public view returns (uint256) {\\n return s.tokenConfigs[_key].custodied;\\n }\\n\\n // ============ Admin functions ============\\n\\n /**\\n * @notice Used to add supported assets. This is an admin only function\\n *\\n * @dev When allowlisting the canonical asset, all representational assets would be\\n * allowlisted as well. In the event you have a different adopted asset (i.e. PoS USDC\\n * on polygon), you should *not* allowlist the adopted asset. The stable swap pool\\n * address used should allow you to swap between the local <> adopted asset.\\n *\\n * If a representation has been deployed at any point, `setupAssetWithDeployedRepresentation`\\n * should be used instead.\\n *\\n * The following can only be added on *REMOTE* domains:\\n * - `_adoptedAssetId`\\n * - `_stableSwapPool`\\n *\\n * Whereas the `_cap` can only be added on the canonical domain\\n *\\n * @param _canonical - The canonical asset to add by id and domain. All representations\\n * will be allowlisted as well\\n * @param _canonicalDecimals - The decimals of the canonical asset (will be used for deployed\\n * representation)\\n * @param _representationName - The name to be used for the deployed asset\\n * @param _representationSymbol - The symbol used for the deployed asset\\n * @param _adoptedAssetId - The used asset id for this domain (e.g. PoS USDC for\\n * polygon)\\n * @param _stableSwapPool - The address of the local stableswap pool, if it exists.\\n */\\n function setupAsset(\\n TokenId calldata _canonical,\\n uint8 _canonicalDecimals,\\n string memory _representationName,\\n string memory _representationSymbol,\\n address _adoptedAssetId,\\n address _stableSwapPool,\\n uint256 _cap\\n ) external onlyOwnerOrAdmin returns (address _local) {\\n // Calculate the canonical key.\\n bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n\\n bool onCanonical = _canonical.domain == s.domain;\\n if (onCanonical) {\\n // On the canonical domain, the local is the canonical address.\\n _local = TypeCasts.bytes32ToAddress(_canonical.id);\\n\\n // Sanity check: ensure adopted asset ID == canonical address (or empty).\\n // This could reflect a user error or miscalculation and lead to unexpected behavior.\\n // NOTE: Since we're on canonical domain, there should be no stableswap pool provided.\\n if ((_adoptedAssetId != address(0) && _adoptedAssetId != _local) || _stableSwapPool != address(0)) {\\n revert TokenFacet__setupAsset_invalidCanonicalConfiguration();\\n }\\n\\n // Enroll the asset. Pass in address(0) for adopted: it should use the local asset (i.e. the\\n // canonical asset in this case) instead for both adopted and local.\\n _enrollAdoptedAndLocalAssets(true, _canonicalDecimals, address(0), _local, address(0), _canonical, _cap, key);\\n } else {\\n // Cannot already have an assigned representation.\\n // NOTE: *If* it does, it can still be replaced with `setupAssetWithDeployedRepresentation`\\n if (s.tokenConfigs[key].representation != address(0) || s.tokenConfigs[key].representationDecimals != 0) {\\n revert TokenFacet__setupAsset_representationListed();\\n }\\n\\n // On remote, deploy a local representation.\\n _local = _deployRepresentation(\\n _canonical.id,\\n _canonical.domain,\\n _canonicalDecimals,\\n _representationName,\\n _representationSymbol\\n );\\n // Enroll the asset.\\n _enrollAdoptedAndLocalAssets(\\n false,\\n _canonicalDecimals,\\n _adoptedAssetId,\\n _local,\\n _stableSwapPool,\\n _canonical,\\n 0,\\n key\\n );\\n }\\n }\\n\\n /**\\n * @notice Used to add supported assets, without deploying a unique representation\\n * asset, and instead using what admins have provided. This is an admin only function\\n *\\n * @dev This function does very minimal checks to ensure the correct `_representation`\\n * token is used. The only enforced checks are:\\n * - Bridge can mint, and balance of bridge will increase\\n * - Bridge can burn, and balance of bridge will decrease\\n *\\n * However, there are many things that must be checked manually to avoid enrolling a bad\\n * representation:\\n * - decimals must always be equal to canonical decimals\\n * - regular `mint`, `burn`, `ERC20` functionality could be implemented improperly\\n * - the required interface functions (see `IBridgeToken`) may not be implemented\\n * - upgradeability could interfere with required functionality\\n *\\n * Using this method allows admins to override existing local tokens, and should be used\\n * carefully.\\n *\\n * @param _canonical - The canonical asset to add by id and domain. All representations\\n * will be whitelisted as well\\n * @param _representation - The address of the representative asset\\n * @param _adoptedAssetId - The used asset id for this domain (e.g. PoS USDC for\\n * polygon)\\n * @param _stableSwapPool - The address of the local stableswap pool, if it exists.\\n */\\n function setupAssetWithDeployedRepresentation(\\n TokenId calldata _canonical,\\n address _representation,\\n address _adoptedAssetId,\\n address _stableSwapPool\\n ) external onlyOwnerOrAdmin returns (address) {\\n if (_representation == address(0)) {\\n revert TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation();\\n }\\n\\n if (_canonical.domain == s.domain) {\\n revert TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain();\\n }\\n\\n // Calculate the canonical key.\\n bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n\\n _enrollAdoptedAndLocalAssets(\\n false,\\n IERC20Metadata(_representation).decimals(),\\n _adoptedAssetId,\\n _representation,\\n _stableSwapPool,\\n _canonical,\\n 0,\\n key\\n );\\n\\n return _representation;\\n }\\n\\n /**\\n * @notice Adds a stable swap pool for the local <> adopted asset.\\n * @dev Must pass in the _canonical information so it can be emitted in event\\n */\\n function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external onlyOwnerOrAdmin {\\n bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n _addStableSwapPool(_canonical, _stableSwapPool, key);\\n }\\n\\n /**\\n * @notice Adds a stable swap pool for the local <> adopted asset.\\n * @dev Must pass in the _canonical information so it can be emitted in event\\n */\\n function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external onlyOwnerOrAdmin {\\n bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n _setLiquidityCap(_canonical, _updated, key);\\n }\\n\\n /**\\n * @notice Used to remove assets from the allowlist\\n * @param _key - The hash of the canonical id and domain to remove (mapping key)\\n * @param _adoptedAssetId - Corresponding adopted asset to remove\\n * @param _representation - Corresponding representation asset to remove\\n\\n */\\n function removeAssetId(\\n bytes32 _key,\\n address _adoptedAssetId,\\n address _representation\\n ) external onlyOwnerOrAdmin {\\n TokenId memory canonical = s.adoptedToCanonical[_adoptedAssetId];\\n _removeAssetId(_key, _adoptedAssetId, _representation, canonical);\\n }\\n\\n /**\\n * @notice Used to remove assets from the allowlist\\n * @param _canonical - The canonical id and domain to remove\\n * @param _adoptedAssetId - Corresponding adopted asset to remove\\n * @param _representation - Corresponding representation asset to remove\\n */\\n function removeAssetId(\\n TokenId calldata _canonical,\\n address _adoptedAssetId,\\n address _representation\\n ) external onlyOwnerOrAdmin {\\n bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n _removeAssetId(key, _adoptedAssetId, _representation, _canonical);\\n }\\n\\n /**\\n * @notice Used to update the name and symbol of a local token\\n * @param _canonical - The canonical id and domain to remove\\n * @param _name - The new name\\n * @param _symbol - The new symbol\\n */\\n function updateDetails(\\n TokenId calldata _canonical,\\n string memory _name,\\n string memory _symbol\\n ) external onlyOwnerOrAdmin {\\n bytes32 key = AssetLogic.calculateCanonicalHash(_canonical.id, _canonical.domain);\\n address local = AssetLogic.getConfig(key).representation;\\n if (local == address(0)) {\\n revert TokenFacet__updateDetails_localNotFound();\\n }\\n\\n // Can only happen on remote domains\\n if (s.domain == _canonical.domain) {\\n revert TokenFacet__updateDetails_onlyRemote();\\n }\\n\\n // ensure asset is currently approved because `s.canonicalToRepresentation` does\\n // not get cleared when asset is removed from allowlist\\n if (!s.tokenConfigs[key].approval) {\\n revert TokenFacet__updateDetails_notApproved();\\n }\\n\\n // make sure the asset is still active\\n IBridgeToken(local).setDetails(_name, _symbol);\\n }\\n\\n // ============ Private Functions ============\\n\\n function _enrollAdoptedAndLocalAssets(\\n bool _onCanonical,\\n uint8 _localDecimals,\\n address _adopted,\\n address _local,\\n address _stableSwapPool,\\n TokenId calldata _canonical,\\n uint256 _cap,\\n bytes32 _key\\n ) internal {\\n // Sanity check: canonical ID and domain are not 0.\\n if (_canonical.domain == 0 || _canonical.id == bytes32(\\\"\\\")) {\\n revert TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical();\\n }\\n\\n // Get true adopted\\n bool adoptedIsLocal = _adopted == address(0);\\n address adopted = adoptedIsLocal ? _local : _adopted;\\n\\n // Get whether you are on canonical\\n bool onCanonical = s.domain == _canonical.domain;\\n\\n // Sanity check: needs approval\\n if (s.tokenConfigs[_key].approval) revert TokenFacet__addAssetId_alreadyAdded();\\n\\n // Sanity check: bridge can mint / burn on remote\\n if (!onCanonical) {\\n IBridgeToken candidate = IBridgeToken(_local);\\n uint256 starting = candidate.balanceOf(address(this));\\n candidate.mint(address(this), 1);\\n if (candidate.balanceOf(address(this)) != starting + 1) {\\n revert TokenFacet__addAssetId_badMint();\\n }\\n candidate.burn(address(this), 1);\\n if (candidate.balanceOf(address(this)) != starting) {\\n revert TokenFacet__addAssetId_badBurn();\\n }\\n }\\n\\n // Generate Config\\n // NOTE: Using address(0) for stable swap, then using `_addStableSwap`. Slightly less\\n // efficient, but preserves events. Same case for cap / custodied.\\n // NOTE: IFF on canonical domain, `representation` must *always* be address(0)!\\n s.tokenConfigs[_key] = TokenConfig(\\n _onCanonical ? address(0) : _local, // representation\\n _localDecimals, // representationDecimals\\n adopted, // adopted\\n adoptedIsLocal ? _localDecimals : IERC20Metadata(adopted).decimals(), // adoptedDecimals\\n address(0), // adoptedToLocalExternalPools, see note\\n true, // approval\\n 0, // cap, see note\\n 0 // custodied, see note\\n );\\n\\n // Update reverse lookups\\n // Update the adopted mapping using convention of local == adopted iff (_adopted == address(0))\\n s.adoptedToCanonical[adopted].domain = _canonical.domain;\\n s.adoptedToCanonical[adopted].id = _canonical.id;\\n\\n if (!_onCanonical) {\\n // Update the local <> canonical. Representations only exist on non-canonical domains.\\n s.representationToCanonical[_local].domain = _canonical.domain;\\n s.representationToCanonical[_local].id = _canonical.id;\\n // Update swap (on the canonical domain, there is no representation / pool).\\n _addStableSwapPool(_canonical, _stableSwapPool, _key);\\n } else if (_cap > 0) {\\n // Update cap (only on canonical domain).\\n _setLiquidityCap(_canonical, _cap, _key);\\n }\\n\\n // Emit event\\n emit AssetAdded(_key, _canonical.id, _canonical.domain, adopted, _local, msg.sender);\\n }\\n\\n /**\\n * @notice Used to add an AMM for adopted <> local assets\\n * @param _canonical - The canonical TokenId to add (domain and id)\\n * @param _stableSwap - The address of the amm to add\\n * @param _key - The hash of the canonical id and domain\\n */\\n function _addStableSwapPool(\\n TokenId calldata _canonical,\\n address _stableSwap,\\n bytes32 _key\\n ) internal {\\n // Update the pool mapping\\n s.tokenConfigs[_key].adoptedToLocalExternalPools = _stableSwap;\\n\\n // Emit event\\n emit StableSwapAdded(_key, _canonical.id, _canonical.domain, _stableSwap, msg.sender);\\n }\\n\\n /**\\n * @notice Used to add a cap on amount of custodied canonical asset\\n * @dev The `custodied` amount will only increase in real time as router liquidity\\n * and xcall are used and the cap is set (i.e. if cap is removed, `custodied` values are\\n * no longer updated or enforced).\\n *\\n * When the `cap` is updated, the `custodied` value is set to the balance of the contract,\\n * which is distinct from *retrievable* funds from the contracts (i.e. could include the\\n * value someone just sent directly to the contract). Whenever you are updating the cap, you\\n * should set the value with this in mind.\\n *\\n * @param _canonical - The canonical TokenId to add (domain and id)\\n * @param _updated - The updated liquidity cap value\\n * @param _key - The hash of the canonical id and domain\\n */\\n function _setLiquidityCap(\\n TokenId calldata _canonical,\\n uint256 _updated,\\n bytes32 _key\\n ) internal {\\n if (s.domain != _canonical.domain) {\\n revert TokenFacet__setLiquidityCap_notCanonicalDomain();\\n }\\n // Update the stored cap\\n s.tokenConfigs[_key].cap = _updated;\\n\\n if (_updated > 0) {\\n // Update the custodied value to be the balance of this contract\\n address canonical = TypeCasts.bytes32ToAddress(_canonical.id);\\n s.tokenConfigs[_key].custodied = IERC20Metadata(canonical).balanceOf(address(this));\\n }\\n\\n emit LiquidityCapUpdated(_key, _canonical.id, _canonical.domain, _updated, msg.sender);\\n }\\n\\n /**\\n * @notice Used to remove assets from the allowlist\\n *\\n * @dev When you are removing an asset, `xcall` will fail but `handle` and `execute` will not to\\n * allow for inflight transfers to be addressed. Similarly, the `repayAavePortal` function will\\n * work.\\n *\\n * @param _key - The hash of the canonical id and domain to remove (mapping key)\\n * @param _adoptedAssetId - Corresponding adopted asset to remove\\n * @param _representation - Corresponding representation asset (i.e. bridged asset) to remove.\\n * @param _canonical - The TokenId (canonical ID and domain) of the asset.\\n */\\n function _removeAssetId(\\n bytes32 _key,\\n address _adoptedAssetId,\\n address _representation,\\n TokenId memory _canonical\\n ) internal {\\n TokenConfig storage config = s.tokenConfigs[_key];\\n // Sanity check: already approval\\n if (!config.approval) revert TokenFacet__removeAssetId_notAdded();\\n\\n // Sanity check: consistent set of params\\n if (config.adopted != _adoptedAssetId || config.representation != _representation)\\n revert TokenFacet__removeAssetId_invalidParams();\\n\\n bool onCanonical = s.domain == _canonical.domain;\\n if (onCanonical) {\\n // Sanity check: no value custodied if on canonical domain\\n address canonicalAsset = TypeCasts.bytes32ToAddress(_canonical.id);\\n // Check custodied amount for the given canonical asset address.\\n // NOTE: if the `cap` is not set, the `custodied` value will not continue to be updated,\\n // so you must use the `balanceOf` for accurate accounting. If there are funds held\\n // on these contracts, then when you remove the asset id, the assets cannot be bridged back and\\n // become worthless. This means the bridged assets would become worthless.\\n // An attacker could prevent admins from removing an asset by sending funds to this contract,\\n // but all of the liquidity should already be removed before this function is called.\\n if (IERC20Metadata(canonicalAsset).balanceOf(address(this)) > 0) {\\n revert TokenFacet__removeAssetId_remainsCustodied();\\n }\\n } else {\\n // Sanity check: supply is 0 if on remote domain.\\n if (IBridgeToken(_representation).totalSupply() > 0) {\\n revert TokenFacet__removeAssetId_remainsCustodied();\\n }\\n }\\n\\n // Delete token config from configs mapping.\\n // NOTE: we do NOT delete the representation entries from the config. This is\\n // done to prevent multiple representations being deployed in `setupAsset`\\n delete s.tokenConfigs[_key].adopted;\\n delete s.tokenConfigs[_key].adoptedDecimals;\\n delete s.tokenConfigs[_key].adoptedToLocalExternalPools;\\n delete s.tokenConfigs[_key].approval;\\n delete s.tokenConfigs[_key].cap;\\n // NOTE: custodied will always be 0 at this point\\n\\n // Delete from reverse lookups\\n delete s.representationToCanonical[_representation];\\n delete s.adoptedToCanonical[_adoptedAssetId];\\n\\n // Emit event\\n emit AssetRemoved(_key, msg.sender);\\n }\\n\\n /**\\n * @notice Deploy and initialize a new token contract\\n * @dev Each token contract is a proxy which\\n * points to the token upgrade beacon\\n * @return _token the address of the token contract\\n */\\n function _deployRepresentation(\\n bytes32 _id,\\n uint32 _domain,\\n uint8 _decimals,\\n string memory _name,\\n string memory _symbol\\n ) internal returns (address _token) {\\n // deploy the token contract\\n _token = address(new BridgeToken(_decimals, _name, _symbol));\\n // emit event upon deploying new token\\n emit TokenDeployed(_domain, _id, _token);\\n }\\n}\\n\",\"keccak256\":\"0x5a7a81aedb000b6c7318a60a982cac6ced747e7d1b6b479f54760a2c04e97ad0\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/BridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Ownable} from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nimport {IBridgeToken} from \\\"../interfaces/IBridgeToken.sol\\\";\\n\\nimport {ERC20} from \\\"./OZERC20.sol\\\";\\n\\ncontract BridgeToken is IBridgeToken, Ownable, ERC20 {\\n // ============ Constructor ============\\n constructor(\\n uint8 decimals_,\\n string memory name_,\\n string memory symbol_\\n ) Ownable() ERC20(decimals_, name_, symbol_, \\\"1\\\") {}\\n\\n // ============ Events ============\\n\\n event UpdateDetails(string indexed name, string indexed symbol);\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Destroys `_amnt` tokens from `_from`, reducing the\\n * total supply.\\n * @dev Emits a {Transfer} event with `to` set to the zero address.\\n * Requirements:\\n * - `_from` cannot be the zero address.\\n * - `_from` must have at least `_amnt` tokens.\\n * @param _from The address from which to destroy the tokens\\n * @param _amnt The amount of tokens to be destroyed\\n */\\n function burn(address _from, uint256 _amnt) external override onlyOwner {\\n _burn(_from, _amnt);\\n }\\n\\n /** @notice Creates `_amnt` tokens and assigns them to `_to`, increasing\\n * the total supply.\\n * @dev Emits a {Transfer} event with `from` set to the zero address.\\n * Requirements:\\n * - `to` cannot be the zero address.\\n * @param _to The destination address\\n * @param _amnt The amount of tokens to be minted\\n */\\n function mint(address _to, uint256 _amnt) external override onlyOwner {\\n _mint(_to, _amnt);\\n }\\n\\n /**\\n * @notice Set the details of a token\\n * @param _newName The new name\\n * @param _newSymbol The new symbol\\n */\\n function setDetails(string calldata _newName, string calldata _newSymbol) external override onlyOwner {\\n // careful with naming convention change here\\n _name = _newName;\\n _symbol = _newSymbol;\\n bytes32 hashedName = keccak256(bytes(_newName));\\n _HASHED_NAME = hashedName;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, _HASHED_VERSION);\\n emit UpdateDetails(_newName, _newSymbol);\\n }\\n}\\n\",\"keccak256\":\"0xed6c82aedc8a694d40521389d3547cab2436d59bd2183a021e4a1844fd766636\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/OZERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n// This is modified from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\"\\n// Modifications were made to allow the name, hashed name, and cached\\n// domain separator to be internal\\n\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\\\";\\nimport {EIP712} from \\\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/Counters.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * Implements ERC20 Permit extension allowing approvals to be made via\\n * signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20\\n * allowance (see {IERC20-allowance}) by presenting a message signed by the\\n * account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin guidelines: functions revert instead\\n * of returning `false` on failure. This behavior is nonetheless conventional\\n * and does not conflict with the expectations of ERC20 applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n *\\n * @dev Cannot use default ERC20/ERC20Permit implementation as there is no way to update\\n * the name (set to private).\\n *\\n * Cannot use default EIP712 implementation as the _HASHED_NAME may change.\\n * These functions use the same implementation, with easier storage access.\\n */\\ncontract ERC20 is IERC20Metadata, IERC20Permit {\\n // See ERC20\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string internal _name; // made internal, need access\\n string internal _symbol; // made internal, need access\\n uint8 internal _decimals; // made internal, need access\\n\\n // See ERC20Permit\\n using Counters for Counters.Counter;\\n\\n mapping(address => Counters.Counter) private _nonces;\\n\\n // See EIP712\\n // Immutables used in EIP 712 structured data hashing & signing\\n // https://eips.ethereum.org/EIPS/eip-712\\n bytes32 private constant _PERMIT_TYPEHASH =\\n keccak256(\\\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\\\");\\n bytes32 internal constant _TYPE_HASH =\\n keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n // made internal, need access\\n\\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\\n // invalidate the cached domain separator if the chain id changes.\\n bytes32 internal _CACHED_DOMAIN_SEPARATOR; // made internal, may change\\n uint256 private immutable _CACHED_CHAIN_ID;\\n address private immutable _CACHED_THIS;\\n\\n bytes32 internal _HASHED_NAME; // made internal, may change\\n bytes32 internal immutable _HASHED_VERSION; // made internal, need access\\n\\n /**\\n * @dev Initializes the {EIP712} domain separator using the `name` parameter,\\n * and setting `version` to `\\\"1\\\"`.\\n *\\n * It's a good idea to use the same `name` that is defined as the ERC20 token name.\\n */\\n constructor(\\n uint8 decimals_,\\n string memory name_,\\n string memory symbol_,\\n string memory version_\\n ) {\\n // ERC20\\n _name = name_;\\n _symbol = symbol_;\\n _decimals = decimals_;\\n\\n // EIP712\\n bytes32 hashedName = keccak256(bytes(name_));\\n bytes32 hashedVersion = keccak256(bytes(version_));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n _CACHED_CHAIN_ID = block.chainid;\\n _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);\\n _CACHED_THIS = address(this);\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return _decimals;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n _transfer(msg.sender, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address _owner, address _spender) public view virtual override returns (uint256) {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n _approve(msg.sender, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * Requirements:\\n *\\n * - `_sender` and `recipient` cannot be the zero address.\\n * - `_sender` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``_sender``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address _sender,\\n address _recipient,\\n uint256 _amount\\n ) public virtual override returns (bool) {\\n _spendAllowance(_sender, msg.sender, _amount);\\n _transfer(_sender, _recipient, _amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `_spender` cannot be the zero address.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {\\n _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + _addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `_spender` cannot be the zero address.\\n * - `_spender` must have allowance for the caller of at least\\n * `_subtractedValue`.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {\\n uint256 currentAllowance = allowance(msg.sender, _spender);\\n require(currentAllowance >= _subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(msg.sender, _spender, currentAllowance - _subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves tokens `amount` from `_sender` to `_recipient`.\\n *\\n * This is internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `_sender` cannot be the zero address.\\n * - `_recipient` cannot be the zero address.\\n * - `_sender` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address _sender,\\n address _recipient,\\n uint256 _amount\\n ) internal virtual {\\n require(_sender != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(_recipient != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(_sender, _recipient, _amount);\\n\\n uint256 fromBalance = _balances[_sender];\\n require(fromBalance >= _amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[_sender] = fromBalance - _amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[_recipient] += _amount;\\n }\\n\\n emit Transfer(_sender, _recipient, _amount);\\n\\n _afterTokenTransfer(_sender, _recipient, _amount);\\n }\\n\\n /** @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal virtual {\\n require(_account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), _account, _amount);\\n\\n _totalSupply += _amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[_account] += _amount;\\n }\\n emit Transfer(address(0), _account, _amount);\\n\\n _afterTokenTransfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal virtual {\\n require(_account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(_account, address(0), _amount);\\n\\n uint256 accountBalance = _balances[_account];\\n require(accountBalance >= _amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[_account] = accountBalance - _amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply\\n _totalSupply -= _amount;\\n }\\n\\n emit Transfer(_account, address(0), _amount);\\n\\n _afterTokenTransfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Sets `_amount` as the allowance of `_spender` over the `_owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `_owner` cannot be the zero address.\\n * - `_spender` cannot be the zero address.\\n */\\n function _approve(\\n address _owner,\\n address _spender,\\n uint256 _amount\\n ) internal virtual {\\n require(_owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(_spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[_owner][_spender] = _amount;\\n emit Approval(_owner, _spender, _amount);\\n }\\n\\n /**\\n * @dev Updates `_owner` s allowance for `_spender` based on spent `_amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address _owner,\\n address _spender,\\n uint256 _amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(_owner, _spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= _amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(_owner, _spender, currentAllowance - _amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `_from` and `_to` are both non-zero, `_amount` of ``_from``'s tokens\\n * will be to transferred to `_to`.\\n * - when `_from` is zero, `_amount` tokens will be minted for `_to`.\\n * - when `_to` is zero, `_amount` of ``_from``'s tokens will be burned.\\n * - `_from` and `_to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address _from,\\n address _to,\\n uint256 _amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address _from,\\n address _to,\\n uint256 _amount\\n ) internal virtual {}\\n\\n /**\\n * @dev See {IERC20Permit-permit}.\\n * @notice Sets approval from owner to spender to value\\n * as long as deadline has not passed\\n * by submitting a valid signature from owner\\n * Uses EIP 712 structured data hashing & signing\\n * https://eips.ethereum.org/EIPS/eip-712\\n * @param _owner The account setting approval & signing the message\\n * @param _spender The account receiving approval to spend owner's tokens\\n * @param _value The amount to set approval for\\n * @param _deadline The timestamp before which the signature must be submitted\\n * @param _v ECDSA signature v\\n * @param _r ECDSA signature r\\n * @param _s ECDSA signature s\\n */\\n function permit(\\n address _owner,\\n address _spender,\\n uint256 _value,\\n uint256 _deadline,\\n uint8 _v,\\n bytes32 _r,\\n bytes32 _s\\n ) public virtual override {\\n require(block.timestamp <= _deadline, \\\"ERC20Permit: expired deadline\\\");\\n\\n bytes32 _structHash = keccak256(\\n abi.encode(_PERMIT_TYPEHASH, _owner, _spender, _value, _useNonce(_owner), _deadline)\\n );\\n\\n bytes32 _hash = _hashTypedDataV4(_structHash);\\n\\n address _signer = ECDSA.recover(_hash, _v, _r, _s);\\n require(_signer == _owner, \\\"ERC20Permit: invalid signature\\\");\\n\\n _approve(_owner, _spender, _value);\\n }\\n\\n /**\\n * @dev See {IERC20Permit-nonces}.\\n */\\n function nonces(address _owner) public view virtual override returns (uint256) {\\n return _nonces[_owner].current();\\n }\\n\\n /**\\n * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.\\n * This is ALWAYS calculated at runtime because the token name is mutable, not constant.\\n */\\n function DOMAIN_SEPARATOR() external view override returns (bytes32) {\\n return _domainSeparatorV4();\\n }\\n\\n /**\\n * @dev \\\"Consume a nonce\\\": return the current value and increment.\\n * @dev See {EIP712._buildDomainSeparator}\\n */\\n function _useNonce(address _owner) internal virtual returns (uint256 current) {\\n Counters.Counter storage nonce = _nonces[_owner];\\n current = nonce.current();\\n nonce.increment();\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n * @dev See {EIP712._buildDomainSeparator}\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) {\\n return _CACHED_DOMAIN_SEPARATOR;\\n } else {\\n return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);\\n }\\n }\\n\\n /**\\n * @dev See {EIP712._buildDomainSeparator}. Made internal to allow usage in parent class.\\n */\\n function _buildDomainSeparator(\\n bytes32 typeHash,\\n bytes32 nameHash,\\n bytes32 versionHash\\n ) internal view returns (bytes32) {\\n return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this)));\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);\\n }\\n}\\n\",\"keccak256\":\"0x7219667c651b2cbcbd1866667c5aa5fa1b1120a2fc111f24290c5ece3b3bba52\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IBridgeToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\ninterface IBridgeToken is IERC20Metadata {\\n function burn(address _from, uint256 _amnt) external;\\n\\n function mint(address _to, uint256 _amnt) external;\\n\\n function setDetails(string calldata _name, string calldata _symbol) external;\\n}\\n\",\"keccak256\":\"0x93b2adcc4b953ecd2d3e738d797f5fbde2ccb3726df10bc7acde9c1b4775b019\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50613a2d806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001455760003560e01c80639b59851911620000bb578063bd8671a7116200007a578063bd8671a714620003ff578063c40584291462000416578063e1cb3958146200042d578063e9d7bcec1462000444578063f1537686146200045b57600080fd5b80639b5985191462000374578063a1b1930114620003a3578063ad4c777114620003ba578063ae8bc0de14620003d1578063b64a5e0714620003e857600080fd5b806357bd0a32116200010857806357bd0a32146200026c5780635a2164e514620002ad5780636006209114620002c457806380dc22481462000328578063949de969146200033f57600080fd5b806303e418c2146200014a57806307a38d7b14620001d45780631506e463146200020c5780631ecf6f9f14620002255780632c1999d01462000255575b600080fd5b620001ae6200015b36600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260066020818152938220805463ffffffff168652929091528252600101549082015290565b60408051825163ffffffff16815260209283015192810192909252015b60405180910390f35b620001eb620001e536600462001abc565b62000472565b604080516001600160a01b03938416815292909116602083015201620001cb565b620002236200021d36600462001b04565b62000498565b005b6200023c6200023636600462001b34565b62000534565b6040516001600160a01b039091168152602001620001cb565b6200023c6200026636600462001b34565b62000547565b6200029c6200027d36600462001b34565b600090815260076020526040902060020154600160a01b900460ff1690565b6040519015158152602001620001cb565b62000223620002be36600462001b4e565b62000554565b620001ae620002d536600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260056020818152938220805463ffffffff168652929091528252600101549082015290565b6200023c6200033936600462001b99565b620005fc565b620003656200035036600462001b34565b60009081526007602052604090206004015490565b604051908152602001620001cb565b6200023c6200038536600462001b34565b6000908152600760205260409020600201546001600160a01b031690565b62000223620003b436600462001bb8565b62000619565b6200023c620003cb36600462001b99565b620006c6565b6200029c620003e236600462001b99565b620006e9565b6200023c620003f936600462001cae565b62000706565b6200023c6200041036600462001b99565b620008d7565b620002236200042736600462001d71565b620008fa565b6200023c6200043e36600462001def565b62000a96565b620002236200045536600462001e4d565b62000c06565b620001ae6200046c36600462001a89565b62000c97565b6000806200048d62000485858562000cb6565b858562000cf9565b915091509250929050565b33620004a362000d2a565b6001600160a01b031614158015620004e2575060033360009081526014602052604090205460ff166003811115620004df57620004df62001e7b565b14155b156200050157604051637b32c26b60e01b815260040160405180910390fd5b600062000520602084018035906200051a908662001e91565b62000cb6565b90506200052f83838362000d58565b505050565b6000620005418262000df3565b92915050565b6000620005418262000e12565b336200055f62000d2a565b6001600160a01b0316141580156200059e575060033360009081526014602052604090205460ff1660038111156200059b576200059b62001e7b565b14155b15620005bd57604051637b32c26b60e01b815260040160405180910390fd5b6000620005d6602085018035906200051a908762001e91565b9050620005f6818484620005f03689900389018962001eaf565b62000e4e565b50505050565b60006200054162000385602084018035906200051a908662001e91565b336200062462000d2a565b6001600160a01b03161415801562000663575060033360009081526014602052604090205460ff16600381111562000660576200066062001e7b565b14155b156200068257604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0382166000908152600560209081526040918290208251808401909352805463ffffffff1683526001015490820152620005f68484848462000e4e565b600062000541620006e3602084018035906200051a908662001e91565b62000df3565b6000620005416200027d602084018035906200051a908662001e91565b6000336200071362000d2a565b6001600160a01b03161415801562000752575060033360009081526014602052604090205460ff1660038111156200074f576200074f62001e7b565b14155b156200077157604051637b32c26b60e01b815260040160405180910390fd5b60006200078a60208a018035906200051a908c62001e91565b60045490915060009063ffffffff16620007a860208c018c62001e91565b63ffffffff161490508015620008385760208a013592506001600160a01b03861615801590620007ea5750826001600160a01b0316866001600160a01b031614155b80620007fe57506001600160a01b03851615155b156200081d5760405163022d833560e01b815260040160405180910390fd5b6200083260018a60008660008f8a89620010cc565b620008ca565b6000828152600760205260409020546001600160a01b0316151580620008755750600082815260076020526040902054600160a01b900460ff1615155b15620008945760405163ae154e0360e01b815260040160405180910390fd5b620008b460208b01803590620008ab908d62001e91565b8b8b8b620016af565b9250620008ca60008a8886898f600089620010cc565b5050979650505050505050565b600062000541620008f4602084018035906200051a908662001e91565b62000e12565b336200090562000d2a565b6001600160a01b03161415801562000944575060033360009081526014602052604090205460ff16600381111562000941576200094162001e7b565b14155b156200096357604051637b32c26b60e01b815260040160405180910390fd5b60006200097c602085018035906200051a908762001e91565b905060006200098b8262001737565b546001600160a01b0316905080620009b657604051639db40a2560e01b815260040160405180910390fd5b620009c5602086018662001e91565b60045463ffffffff918216911603620009f157604051630e5a87cb60e21b815260040160405180910390fd5b600082815260076020526040902060020154600160a01b900460ff1662000a2b57604051634d665d9960e01b815260040160405180910390fd5b604051635bd8487760e11b81526001600160a01b0382169063b7b090ee9062000a5b908790879060040162001f54565b600060405180830381600087803b15801562000a7657600080fd5b505af115801562000a8b573d6000803e3d6000fd5b505050505050505050565b60003362000aa362000d2a565b6001600160a01b03161415801562000ae2575060033360009081526014602052604090205460ff16600381111562000adf5762000adf62001e7b565b14155b1562000b0157604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03841662000b2957604051631363580360e21b815260040160405180910390fd5b60045463ffffffff1662000b41602087018762001e91565b63ffffffff160362000b665760405163333de67d60e21b815260040160405180910390fd5b600062000b7f602087018035906200051a908962001e91565b905062000bf96000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bec919062001f86565b8688878b600088620010cc565b849150505b949350505050565b3362000c1162000d2a565b6001600160a01b03161415801562000c50575060033360009081526014602052604090205460ff16600381111562000c4d5762000c4d62001e7b565b14155b1562000c6f57604051637b32c26b60e01b815260040160405180910390fd5b600062000c88602084018035906200051a908662001e91565b90506200052f83838362001780565b60408051808201909152600080825260208201526200054182620018be565b6000828260405160200162000cdb92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080600062000d0d8686866000620018df565b9050600062000d1c8762000e12565b919791965090945050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b600081815260076020908152604090912060020180546001600160a01b0319166001600160a01b03851617905562000d939084018462001e91565b63ffffffff168360200135827f16285b1cf634d546d51fefe55f6e63e5edf970d2a3d2bd50b55a8cfad25e8b56853360405162000de69291906001600160a01b0392831681529116602082015260400190565b60405180910390a4505050565b60008062000e018362001737565b546001600160a01b03169392505050565b60008062000e208362001737565b600101546001600160a01b03169050806200054157604051630558a50760e31b815260040160405180910390fd5b60008481526007602052604090206002810154600160a01b900460ff1662000e8957604051631c999e7d60e11b815260040160405180910390fd5b60018101546001600160a01b03858116911614158062000eb6575080546001600160a01b03848116911614155b1562000ed5576040516318707fc960e31b815260040160405180910390fd5b815160045463ffffffff908116911614801562000f9257600062000efa846020015190565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6b919062001fa6565b111562000f8b5760405163454732f160e11b815260040160405180910390fd5b5062001019565b6000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000fd3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff9919062001fa6565b1115620010195760405163454732f160e11b815260040160405180910390fd5b6000868152600760209081526040808320600180820180546001600160a81b0319908116909155600283018054909116905560039091018490556001600160a01b03888116855260068452828520805463ffffffff199081168255908301869055908a16855260058452828520805490911681550192909255905133815287917f9d181adb70e733f5235f839c1eed929407ea8526e41d01f49b9fef703e78dddf910160405180910390a2505050505050565b620010db602084018462001e91565b63ffffffff161580620010f057506020830135155b156200110f576040516375ba0d7960e11b815260040160405180910390fd5b6001600160a01b038616156000816200112957876200112b565b865b905060006200113e602087018762001e91565b60045460008681526007602052604090206002015463ffffffff92831692909116919091149150600160a01b900460ff16156200118e5760405163bfa2bf9b60e01b815260040160405180910390fd5b80620013f3576040516370a0823160e01b815230600482015288906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015620011de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001204919062001fa6565b6040516340c10f1960e01b8152306004820152600160248201529091506001600160a01b038316906340c10f1990604401600060405180830381600087803b1580156200125057600080fd5b505af115801562001265573d6000803e3d6000fd5b5050505080600162001278919062001fc0565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015620012bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012e3919062001fa6565b14620013025760405163016dd8ed60e71b815260040160405180910390fd5b604051632770a7eb60e21b8152306004820152600160248201526001600160a01b03831690639dc29fac90604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03851691506370a0823190602401602060405180830381865afa158015620013ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013d1919062001fa6565b14620013f05760405163ad6f16e360e01b815260040160405180910390fd5b50505b6040518061010001604052808c6200140c57896200140f565b60005b6001600160a01b031681526020018b60ff168152602001836001600160a01b0316815260200184620014a657836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200147a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014a0919062001f86565b620014a8565b8b5b60ff90811682526000602080840182905260016040808601829052606080870185905260809687018590528b8552600784529381902087518154898601518816600160a01b9081026001600160a81b03199283166001600160a01b0394851617178455938a01519483018054978b0151909816840296811694821694909417959095179095559486015160028501805460a089015115159097029690921693169290921793909317905560c0830151600382015560e090920151600490920191909155620015799087018762001e91565b6001600160a01b0383166000908152600560209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101558a6200161957620015ca602087018762001e91565b6001600160a01b0389166000908152600660209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101556200161386888662000d58565b6200162d565b84156200162d576200162d86868662001780565b6200163c602087018762001e91565b63ffffffff168660200135857f0c58c78506e2d526f5ccdba28119c9ca3b5ce48e1462e0e19bc39232db11c632858c336040516200169a939291906001600160a01b0393841681529183166020830152909116604082015260600190565b60405180910390a45050505050505050505050565b6000838383604051620016c29062001a5e565b620016d09392919062001fe2565b604051809103906000f080158015620016ed573d6000803e3d6000fd5b509050806001600160a01b0316868663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a495945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015620017795760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b6200178f602084018462001e91565b60045463ffffffff908116911614620017bb5760405163a56029bd60e01b815260040160405180910390fd5b600081815260076020526040902060030182905581156200185f57600060208401356040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa15801562001825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200184b919062001fa6565b600083815260076020526040902060040155505b6200186e602084018462001e91565b63ffffffff168360200135827f8976b61819dcee01042166c2c5612babc4f820a30843a7f8b23c0ddc343f6ef4853360405162000de69291909182526001600160a01b0316602082015260400190565b6040805180820190915260008082526020820152620005418260006200191d565b600481015460009063ffffffff908116908416036200190057508262000bfe565b6200190b8562001737565b546001600160a01b0316905062000bfe565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b0384166200195c57905062000541565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215620019a957905062000541565b620019b5848462001a1d565b15620019dd57600483015463ffffffff1681526001600160a01b038416602082015262001779565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6001600160a01b038216600090815260068201602052604081205463ffffffff161562001a4d5750600062000541565b50506001600160a01b03163b151590565b6119d9806200201f83390190565b80356001600160a01b038116811462001a8457600080fd5b919050565b60006020828403121562001a9c57600080fd5b620017798262001a6c565b803563ffffffff8116811462001a8457600080fd5b6000806040838503121562001ad057600080fd5b8235915062001ae26020840162001aa7565b90509250929050565b60006040828403121562001afe57600080fd5b50919050565b6000806060838503121562001b1857600080fd5b62001b24848462001aeb565b915062001ae26040840162001a6c565b60006020828403121562001b4757600080fd5b5035919050565b60008060006080848603121562001b6457600080fd5b62001b70858562001aeb565b925062001b806040850162001a6c565b915062001b906060850162001a6c565b90509250925092565b60006040828403121562001bac57600080fd5b62001779838362001aeb565b60008060006060848603121562001bce57600080fd5b8335925062001be06020850162001a6c565b915062001b906040850162001a6c565b60ff8116811462001c0057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262001c2b57600080fd5b813567ffffffffffffffff8082111562001c495762001c4962001c03565b604051601f8301601f19908116603f0116810190828211818310171562001c745762001c7462001c03565b8160405283815286602085880101111562001c8e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806000806000610100888a03121562001ccb57600080fd5b62001cd7898962001aeb565b9650604088013562001ce98162001bf0565b9550606088013567ffffffffffffffff8082111562001d0757600080fd5b62001d158b838c0162001c19565b965060808a013591508082111562001d2c57600080fd5b5062001d3b8a828b0162001c19565b94505062001d4c60a0890162001a6c565b925062001d5c60c0890162001a6c565b915060e0880135905092959891949750929550565b60008060006080848603121562001d8757600080fd5b62001d93858562001aeb565b9250604084013567ffffffffffffffff8082111562001db157600080fd5b62001dbf8783880162001c19565b9350606086013591508082111562001dd657600080fd5b5062001de58682870162001c19565b9150509250925092565b60008060008060a0858703121562001e0657600080fd5b62001e12868662001aeb565b935062001e226040860162001a6c565b925062001e326060860162001a6c565b915062001e426080860162001a6c565b905092959194509250565b6000806060838503121562001e6157600080fd5b62001e6d848462001aeb565b946040939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121562001ea457600080fd5b620017798262001aa7565b60006040828403121562001ec257600080fd5b6040516040810181811067ffffffffffffffff8211171562001ee85762001ee862001c03565b60405262001ef68362001aa7565b8152602083013560208201528091505092915050565b6000815180845260005b8181101562001f345760208185018101518683018201520162001f16565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600062001f69604083018562001f0c565b828103602084015262001f7d818562001f0c565b95945050505050565b60006020828403121562001f9957600080fd5b8151620017798162001bf0565b60006020828403121562001fb957600080fd5b5051919050565b808201808211156200054157634e487b7160e01b600052601160045260246000fd5b60ff8416815260606020820152600062002000606083018562001f0c565b828103604084015262002014818562001f0c565b969550505050505056fe60e06040523480156200001157600080fd5b50604051620019d9380380620019d9833981016040819052620000349162000245565b828282604051806040016040528060018152602001603160f81b8152506200006b620000656200012c60201b60201c565b62000130565b600462000079848262000358565b50600562000088838262000358565b506006805460ff191660ff9590951694909417909355508051602091820120825192820192909220600983905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a08086018290528351808703820181529590920190925283519390920192909220600855525062000424915050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001a857600080fd5b81516001600160401b0380821115620001c557620001c562000180565b604051601f8301601f19908116603f01168101908282118183101715620001f057620001f062000180565b816040528381526020925086838588010111156200020d57600080fd5b600091505b8382101562000231578582018301518183018401529082019062000212565b600093810190920192909252949350505050565b6000806000606084860312156200025b57600080fd5b835160ff811681146200026d57600080fd5b60208501519093506001600160401b03808211156200028b57600080fd5b620002998783880162000196565b93506040860151915080821115620002b057600080fd5b50620002bf8682870162000196565b9150509250925092565b600181811c90821680620002de57607f821691505b602082108103620002ff57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035357600081815260208120601f850160051c810160208610156200032e5750805b601f850160051c820191505b818110156200034f578281556001016200033a565b5050505b505050565b81516001600160401b0381111562000374576200037462000180565b6200038c81620003858454620002c9565b8462000305565b602080601f831160018114620003c45760008415620003ab5750858301515b600019600386901b1c1916600185901b1785556200034f565b600085815260208120601f198616915b82811015620003f557888601518255948401946001909101908401620003d4565b5085821015620004145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05161157e6200045b600039600081816105400152610ba601526000610b2501526000610b4f015261157e6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a9059cbb11610071578063a9059cbb14610269578063b7b090ee1461027c578063d505accf1461028f578063dd62ed3e146102a2578063f2fde38b146102b557600080fd5b80637ecebe001461020d5780638da5cb5b1461022057806395d89b411461023b5780639dc29fac14610243578063a457c2d71461025657600080fd5b80633644e515116100f45780633644e515146101ac57806339509351146101b457806340c10f19146101c757806370a08231146101dc578063715018a61461020557600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102c8565b604051610146919061115b565b60405180910390f35b61016261015d3660046111c5565b61035a565b6040519015158152602001610146565b6003545b604051908152602001610146565b6101626101923660046111ef565b610371565b60065460405160ff9091168152602001610146565b610176610393565b6101626101c23660046111c5565b6103a2565b6101da6101d53660046111c5565b6103de565b005b6101766101ea36600461122b565b6001600160a01b031660009081526001602052604090205490565b6101da6103f4565b61017661021b36600461122b565b610408565b6000546040516001600160a01b039091168152602001610146565b610139610426565b6101da6102513660046111c5565b610435565b6101626102643660046111c5565b610447565b6101626102773660046111c5565b6104c6565b6101da61028a366004611296565b6104d3565b6101da61029d366004611302565b6105c6565b6101766102b0366004611375565b61072a565b6101da6102c336600461122b565b610755565b6060600480546102d7906113a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610303906113a8565b80156103505780601f1061032557610100808354040283529160200191610350565b820191906000526020600020905b81548152906001019060200180831161033357829003601f168201915b5050505050905090565b60006103673384846107ce565b5060015b92915050565b600061037e8433846108f3565b61038984848461096d565b5060019392505050565b600061039d610b18565b905090565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103679185906103d99086906113dc565b6107ce565b6103e6610bca565b6103f08282610c24565b5050565b6103fc610bca565b6104066000610ce5565b565b6001600160a01b03811660009081526007602052604081205461036b565b6060600580546102d7906113a8565b61043d610bca565b6103f08282610d35565b600080610454338561072a565b9050828110156104b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038933858584036107ce565b600061036733848461096d565b6104db610bca565b60046104e8848683611461565b5060056104f6828483611461565b5060008484604051610509929190611522565b604051908190039020600981905590506105647f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f827f0000000000000000000000000000000000000000000000000000000000000000610e66565b6008556040516105779084908490611522565b6040518091039020858560405161058f929190611522565b604051908190038120907f1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd90600090a35050505050565b834211156106165760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106458c610eaf565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106a082610ed7565b905060006106b082878787610f25565b9050896001600160a01b0316816001600160a01b0316146107135760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104b0565b61071e8a8a8a6107ce565b50505050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61075d610bca565b6001600160a01b0381166107c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6107cb81610ce5565b50565b6001600160a01b0383166108305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b0565b6001600160a01b0382166108915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108ff848461072a565b90506000198114610967578181101561095a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b0565b61096784848484036107ce565b50505050565b6001600160a01b0383166109d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b0565b6001600160a01b038216610a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b0565b6001600160a01b03831660009081526001602052604090205481811015610aab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0b9086815260200190565b60405180910390a3610967565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b7157507f000000000000000000000000000000000000000000000000000000000000000046145b15610b7d575060085490565b61039d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6009547f0000000000000000000000000000000000000000000000000000000000000000610e66565b6000546001600160a01b031633146104065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6001600160a01b038216610c7a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b0565b8060036000828254610c8c91906113dc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610d955760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b0565b6001600160a01b03821660009081526001602052604090205481811015610e095760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b0565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108e6565b505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061036b610ee4610b18565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f3687878787610f4d565b91509150610f4381611011565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f845750600090506003611008565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fd8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661100157600060019250925050611008565b9150600090505b94509492505050565b600081600481111561102557611025611532565b0361102d5750565b600181600481111561104157611041611532565b0361108e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104b0565b60028160048111156110a2576110a2611532565b036110ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104b0565b600381600481111561110357611103611532565b036107cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104b0565b600060208083528351808285015260005b818110156111885785810183015185820160400152820161116c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111c057600080fd5b919050565b600080604083850312156111d857600080fd5b6111e1836111a9565b946020939093013593505050565b60008060006060848603121561120457600080fd5b61120d846111a9565b925061121b602085016111a9565b9150604084013590509250925092565b60006020828403121561123d57600080fd5b611246826111a9565b9392505050565b60008083601f84011261125f57600080fd5b50813567ffffffffffffffff81111561127757600080fd5b60208301915083602082850101111561128f57600080fd5b9250929050565b600080600080604085870312156112ac57600080fd5b843567ffffffffffffffff808211156112c457600080fd5b6112d08883890161124d565b909650945060208701359150808211156112e957600080fd5b506112f68782880161124d565b95989497509550505050565b600080600080600080600060e0888a03121561131d57600080fd5b611326886111a9565b9650611334602089016111a9565b95506040880135945060608801359350608088013560ff8116811461135857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561138857600080fd5b611391836111a9565b915061139f602084016111a9565b90509250929050565b600181811c908216806113bc57607f821691505b602082108103610ed157634e487b7160e01b600052602260045260246000fd5b8082018082111561036b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610e6157600081815260208120601f850160051c8101602086101561143a5750805b601f850160051c820191505b8181101561145957828155600101611446565b505050505050565b67ffffffffffffffff831115611479576114796113fd565b61148d8361148783546113a8565b83611413565b6000601f8411600181146114c157600085156114a95750838201355b600019600387901b1c1916600186901b17835561151b565b600083815260209020601f19861690835b828110156114f257868501358255602094850194600190920191016114d2565b508682101561150f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208113c928e03165e19b5c7ac5b67b85c32ab586cd042677306fbd142d27afccf664736f6c63430008110033a264697066735822122042090937ba355ddc17492b115056d5eea38b3ad89fb98b1449f0c1ff95beac8564736f6c63430008110033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620001455760003560e01c80639b59851911620000bb578063bd8671a7116200007a578063bd8671a714620003ff578063c40584291462000416578063e1cb3958146200042d578063e9d7bcec1462000444578063f1537686146200045b57600080fd5b80639b5985191462000374578063a1b1930114620003a3578063ad4c777114620003ba578063ae8bc0de14620003d1578063b64a5e0714620003e857600080fd5b806357bd0a32116200010857806357bd0a32146200026c5780635a2164e514620002ad5780636006209114620002c457806380dc22481462000328578063949de969146200033f57600080fd5b806303e418c2146200014a57806307a38d7b14620001d45780631506e463146200020c5780631ecf6f9f14620002255780632c1999d01462000255575b600080fd5b620001ae6200015b36600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260066020818152938220805463ffffffff168652929091528252600101549082015290565b60408051825163ffffffff16815260209283015192810192909252015b60405180910390f35b620001eb620001e536600462001abc565b62000472565b604080516001600160a01b03938416815292909116602083015201620001cb565b620002236200021d36600462001b04565b62000498565b005b6200023c6200023636600462001b34565b62000534565b6040516001600160a01b039091168152602001620001cb565b6200023c6200026636600462001b34565b62000547565b6200029c6200027d36600462001b34565b600090815260076020526040902060020154600160a01b900460ff1690565b6040519015158152602001620001cb565b62000223620002be36600462001b4e565b62000554565b620001ae620002d536600462001a89565b6040805180820190915260008082526020820152506040805180820182526001600160a01b03909216600081815260056020818152938220805463ffffffff168652929091528252600101549082015290565b6200023c6200033936600462001b99565b620005fc565b620003656200035036600462001b34565b60009081526007602052604090206004015490565b604051908152602001620001cb565b6200023c6200038536600462001b34565b6000908152600760205260409020600201546001600160a01b031690565b62000223620003b436600462001bb8565b62000619565b6200023c620003cb36600462001b99565b620006c6565b6200029c620003e236600462001b99565b620006e9565b6200023c620003f936600462001cae565b62000706565b6200023c6200041036600462001b99565b620008d7565b620002236200042736600462001d71565b620008fa565b6200023c6200043e36600462001def565b62000a96565b620002236200045536600462001e4d565b62000c06565b620001ae6200046c36600462001a89565b62000c97565b6000806200048d62000485858562000cb6565b858562000cf9565b915091509250929050565b33620004a362000d2a565b6001600160a01b031614158015620004e2575060033360009081526014602052604090205460ff166003811115620004df57620004df62001e7b565b14155b156200050157604051637b32c26b60e01b815260040160405180910390fd5b600062000520602084018035906200051a908662001e91565b62000cb6565b90506200052f83838362000d58565b505050565b6000620005418262000df3565b92915050565b6000620005418262000e12565b336200055f62000d2a565b6001600160a01b0316141580156200059e575060033360009081526014602052604090205460ff1660038111156200059b576200059b62001e7b565b14155b15620005bd57604051637b32c26b60e01b815260040160405180910390fd5b6000620005d6602085018035906200051a908762001e91565b9050620005f6818484620005f03689900389018962001eaf565b62000e4e565b50505050565b60006200054162000385602084018035906200051a908662001e91565b336200062462000d2a565b6001600160a01b03161415801562000663575060033360009081526014602052604090205460ff16600381111562000660576200066062001e7b565b14155b156200068257604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0382166000908152600560209081526040918290208251808401909352805463ffffffff1683526001015490820152620005f68484848462000e4e565b600062000541620006e3602084018035906200051a908662001e91565b62000df3565b6000620005416200027d602084018035906200051a908662001e91565b6000336200071362000d2a565b6001600160a01b03161415801562000752575060033360009081526014602052604090205460ff1660038111156200074f576200074f62001e7b565b14155b156200077157604051637b32c26b60e01b815260040160405180910390fd5b60006200078a60208a018035906200051a908c62001e91565b60045490915060009063ffffffff16620007a860208c018c62001e91565b63ffffffff161490508015620008385760208a013592506001600160a01b03861615801590620007ea5750826001600160a01b0316866001600160a01b031614155b80620007fe57506001600160a01b03851615155b156200081d5760405163022d833560e01b815260040160405180910390fd5b6200083260018a60008660008f8a89620010cc565b620008ca565b6000828152600760205260409020546001600160a01b0316151580620008755750600082815260076020526040902054600160a01b900460ff1615155b15620008945760405163ae154e0360e01b815260040160405180910390fd5b620008b460208b01803590620008ab908d62001e91565b8b8b8b620016af565b9250620008ca60008a8886898f600089620010cc565b5050979650505050505050565b600062000541620008f4602084018035906200051a908662001e91565b62000e12565b336200090562000d2a565b6001600160a01b03161415801562000944575060033360009081526014602052604090205460ff16600381111562000941576200094162001e7b565b14155b156200096357604051637b32c26b60e01b815260040160405180910390fd5b60006200097c602085018035906200051a908762001e91565b905060006200098b8262001737565b546001600160a01b0316905080620009b657604051639db40a2560e01b815260040160405180910390fd5b620009c5602086018662001e91565b60045463ffffffff918216911603620009f157604051630e5a87cb60e21b815260040160405180910390fd5b600082815260076020526040902060020154600160a01b900460ff1662000a2b57604051634d665d9960e01b815260040160405180910390fd5b604051635bd8487760e11b81526001600160a01b0382169063b7b090ee9062000a5b908790879060040162001f54565b600060405180830381600087803b15801562000a7657600080fd5b505af115801562000a8b573d6000803e3d6000fd5b505050505050505050565b60003362000aa362000d2a565b6001600160a01b03161415801562000ae2575060033360009081526014602052604090205460ff16600381111562000adf5762000adf62001e7b565b14155b1562000b0157604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b03841662000b2957604051631363580360e21b815260040160405180910390fd5b60045463ffffffff1662000b41602087018762001e91565b63ffffffff160362000b665760405163333de67d60e21b815260040160405180910390fd5b600062000b7f602087018035906200051a908962001e91565b905062000bf96000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bec919062001f86565b8688878b600088620010cc565b849150505b949350505050565b3362000c1162000d2a565b6001600160a01b03161415801562000c50575060033360009081526014602052604090205460ff16600381111562000c4d5762000c4d62001e7b565b14155b1562000c6f57604051637b32c26b60e01b815260040160405180910390fd5b600062000c88602084018035906200051a908662001e91565b90506200052f83838362001780565b60408051808201909152600080825260208201526200054182620018be565b6000828260405160200162000cdb92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080600062000d0d8686866000620018df565b9050600062000d1c8762000e12565b919791965090945050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b600081815260076020908152604090912060020180546001600160a01b0319166001600160a01b03851617905562000d939084018462001e91565b63ffffffff168360200135827f16285b1cf634d546d51fefe55f6e63e5edf970d2a3d2bd50b55a8cfad25e8b56853360405162000de69291906001600160a01b0392831681529116602082015260400190565b60405180910390a4505050565b60008062000e018362001737565b546001600160a01b03169392505050565b60008062000e208362001737565b600101546001600160a01b03169050806200054157604051630558a50760e31b815260040160405180910390fd5b60008481526007602052604090206002810154600160a01b900460ff1662000e8957604051631c999e7d60e11b815260040160405180910390fd5b60018101546001600160a01b03858116911614158062000eb6575080546001600160a01b03848116911614155b1562000ed5576040516318707fc960e31b815260040160405180910390fd5b815160045463ffffffff908116911614801562000f9257600062000efa846020015190565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6b919062001fa6565b111562000f8b5760405163454732f160e11b815260040160405180910390fd5b5062001019565b6000846001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000fd3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff9919062001fa6565b1115620010195760405163454732f160e11b815260040160405180910390fd5b6000868152600760209081526040808320600180820180546001600160a81b0319908116909155600283018054909116905560039091018490556001600160a01b03888116855260068452828520805463ffffffff199081168255908301869055908a16855260058452828520805490911681550192909255905133815287917f9d181adb70e733f5235f839c1eed929407ea8526e41d01f49b9fef703e78dddf910160405180910390a2505050505050565b620010db602084018462001e91565b63ffffffff161580620010f057506020830135155b156200110f576040516375ba0d7960e11b815260040160405180910390fd5b6001600160a01b038616156000816200112957876200112b565b865b905060006200113e602087018762001e91565b60045460008681526007602052604090206002015463ffffffff92831692909116919091149150600160a01b900460ff16156200118e5760405163bfa2bf9b60e01b815260040160405180910390fd5b80620013f3576040516370a0823160e01b815230600482015288906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015620011de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001204919062001fa6565b6040516340c10f1960e01b8152306004820152600160248201529091506001600160a01b038316906340c10f1990604401600060405180830381600087803b1580156200125057600080fd5b505af115801562001265573d6000803e3d6000fd5b5050505080600162001278919062001fc0565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015620012bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012e3919062001fa6565b14620013025760405163016dd8ed60e71b815260040160405180910390fd5b604051632770a7eb60e21b8152306004820152600160248201526001600160a01b03831690639dc29fac90604401600060405180830381600087803b1580156200134b57600080fd5b505af115801562001360573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b03851691506370a0823190602401602060405180830381865afa158015620013ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013d1919062001fa6565b14620013f05760405163ad6f16e360e01b815260040160405180910390fd5b50505b6040518061010001604052808c6200140c57896200140f565b60005b6001600160a01b031681526020018b60ff168152602001836001600160a01b0316815260200184620014a657836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200147a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014a0919062001f86565b620014a8565b8b5b60ff90811682526000602080840182905260016040808601829052606080870185905260809687018590528b8552600784529381902087518154898601518816600160a01b9081026001600160a81b03199283166001600160a01b0394851617178455938a01519483018054978b0151909816840296811694821694909417959095179095559486015160028501805460a089015115159097029690921693169290921793909317905560c0830151600382015560e090920151600490920191909155620015799087018762001e91565b6001600160a01b0383166000908152600560209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101558a6200161957620015ca602087018762001e91565b6001600160a01b0389166000908152600660209081526040909120805463ffffffff191663ffffffff939093169290921782558701356001909101556200161386888662000d58565b6200162d565b84156200162d576200162d86868662001780565b6200163c602087018762001e91565b63ffffffff168660200135857f0c58c78506e2d526f5ccdba28119c9ca3b5ce48e1462e0e19bc39232db11c632858c336040516200169a939291906001600160a01b0393841681529183166020830152909116604082015260600190565b60405180910390a45050505050505050505050565b6000838383604051620016c29062001a5e565b620016d09392919062001fe2565b604051809103906000f080158015620016ed573d6000803e3d6000fd5b509050806001600160a01b0316868663ffffffff167f84d5e3618bf276f3d29a931646fdd996b398a3efa3cf6bceefc1fe7f0304059f60405160405180910390a495945050505050565b6000818152600760205260408120600180820154839291600160a01b90910460ff161015620017795760405163618cca3f60e11b815260040160405180910390fd5b9392505050565b6200178f602084018462001e91565b60045463ffffffff908116911614620017bb5760405163a56029bd60e01b815260040160405180910390fd5b600081815260076020526040902060030182905581156200185f57600060208401356040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa15801562001825573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200184b919062001fa6565b600083815260076020526040902060040155505b6200186e602084018462001e91565b63ffffffff168360200135827f8976b61819dcee01042166c2c5612babc4f820a30843a7f8b23c0ddc343f6ef4853360405162000de69291909182526001600160a01b0316602082015260400190565b6040805180820190915260008082526020820152620005418260006200191d565b600481015460009063ffffffff908116908416036200190057508262000bfe565b6200190b8562001737565b546001600160a01b0316905062000bfe565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b0384166200195c57905062000541565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215620019a957905062000541565b620019b5848462001a1d565b15620019dd57600483015463ffffffff1681526001600160a01b038416602082015262001779565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6001600160a01b038216600090815260068201602052604081205463ffffffff161562001a4d5750600062000541565b50506001600160a01b03163b151590565b6119d9806200201f83390190565b80356001600160a01b038116811462001a8457600080fd5b919050565b60006020828403121562001a9c57600080fd5b620017798262001a6c565b803563ffffffff8116811462001a8457600080fd5b6000806040838503121562001ad057600080fd5b8235915062001ae26020840162001aa7565b90509250929050565b60006040828403121562001afe57600080fd5b50919050565b6000806060838503121562001b1857600080fd5b62001b24848462001aeb565b915062001ae26040840162001a6c565b60006020828403121562001b4757600080fd5b5035919050565b60008060006080848603121562001b6457600080fd5b62001b70858562001aeb565b925062001b806040850162001a6c565b915062001b906060850162001a6c565b90509250925092565b60006040828403121562001bac57600080fd5b62001779838362001aeb565b60008060006060848603121562001bce57600080fd5b8335925062001be06020850162001a6c565b915062001b906040850162001a6c565b60ff8116811462001c0057600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262001c2b57600080fd5b813567ffffffffffffffff8082111562001c495762001c4962001c03565b604051601f8301601f19908116603f0116810190828211818310171562001c745762001c7462001c03565b8160405283815286602085880101111562001c8e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806000806000610100888a03121562001ccb57600080fd5b62001cd7898962001aeb565b9650604088013562001ce98162001bf0565b9550606088013567ffffffffffffffff8082111562001d0757600080fd5b62001d158b838c0162001c19565b965060808a013591508082111562001d2c57600080fd5b5062001d3b8a828b0162001c19565b94505062001d4c60a0890162001a6c565b925062001d5c60c0890162001a6c565b915060e0880135905092959891949750929550565b60008060006080848603121562001d8757600080fd5b62001d93858562001aeb565b9250604084013567ffffffffffffffff8082111562001db157600080fd5b62001dbf8783880162001c19565b9350606086013591508082111562001dd657600080fd5b5062001de58682870162001c19565b9150509250925092565b60008060008060a0858703121562001e0657600080fd5b62001e12868662001aeb565b935062001e226040860162001a6c565b925062001e326060860162001a6c565b915062001e426080860162001a6c565b905092959194509250565b6000806060838503121562001e6157600080fd5b62001e6d848462001aeb565b946040939093013593505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121562001ea457600080fd5b620017798262001aa7565b60006040828403121562001ec257600080fd5b6040516040810181811067ffffffffffffffff8211171562001ee85762001ee862001c03565b60405262001ef68362001aa7565b8152602083013560208201528091505092915050565b6000815180845260005b8181101562001f345760208185018101518683018201520162001f16565b506000602082860101526020601f19601f83011685010191505092915050565b60408152600062001f69604083018562001f0c565b828103602084015262001f7d818562001f0c565b95945050505050565b60006020828403121562001f9957600080fd5b8151620017798162001bf0565b60006020828403121562001fb957600080fd5b5051919050565b808201808211156200054157634e487b7160e01b600052601160045260246000fd5b60ff8416815260606020820152600062002000606083018562001f0c565b828103604084015262002014818562001f0c565b969550505050505056fe60e06040523480156200001157600080fd5b50604051620019d9380380620019d9833981016040819052620000349162000245565b828282604051806040016040528060018152602001603160f81b8152506200006b620000656200012c60201b60201c565b62000130565b600462000079848262000358565b50600562000088838262000358565b506006805460ff191660ff9590951694909417909355508051602091820120825192820192909220600983905560c0818152466080818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801528082019790975260608701949094528501523060a08086018290528351808703820181529590920190925283519390920192909220600855525062000424915050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001a857600080fd5b81516001600160401b0380821115620001c557620001c562000180565b604051601f8301601f19908116603f01168101908282118183101715620001f057620001f062000180565b816040528381526020925086838588010111156200020d57600080fd5b600091505b8382101562000231578582018301518183018401529082019062000212565b600093810190920192909252949350505050565b6000806000606084860312156200025b57600080fd5b835160ff811681146200026d57600080fd5b60208501519093506001600160401b03808211156200028b57600080fd5b620002998783880162000196565b93506040860151915080821115620002b057600080fd5b50620002bf8682870162000196565b9150509250925092565b600181811c90821680620002de57607f821691505b602082108103620002ff57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035357600081815260208120601f850160051c810160208610156200032e5750805b601f850160051c820191505b818110156200034f578281556001016200033a565b5050505b505050565b81516001600160401b0381111562000374576200037462000180565b6200038c81620003858454620002c9565b8462000305565b602080601f831160018114620003c45760008415620003ab5750858301515b600019600386901b1c1916600185901b1785556200034f565b600085815260208120601f198616915b82811015620003f557888601518255948401946001909101908401620003d4565b5085821015620004145787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05161157e6200045b600039600081816105400152610ba601526000610b2501526000610b4f015261157e6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637ecebe00116100ad578063a9059cbb11610071578063a9059cbb14610269578063b7b090ee1461027c578063d505accf1461028f578063dd62ed3e146102a2578063f2fde38b146102b557600080fd5b80637ecebe001461020d5780638da5cb5b1461022057806395d89b411461023b5780639dc29fac14610243578063a457c2d71461025657600080fd5b80633644e515116100f45780633644e515146101ac57806339509351146101b457806340c10f19146101c757806370a08231146101dc578063715018a61461020557600080fd5b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017257806323b872dd14610184578063313ce56714610197575b600080fd5b6101396102c8565b604051610146919061115b565b60405180910390f35b61016261015d3660046111c5565b61035a565b6040519015158152602001610146565b6003545b604051908152602001610146565b6101626101923660046111ef565b610371565b60065460405160ff9091168152602001610146565b610176610393565b6101626101c23660046111c5565b6103a2565b6101da6101d53660046111c5565b6103de565b005b6101766101ea36600461122b565b6001600160a01b031660009081526001602052604090205490565b6101da6103f4565b61017661021b36600461122b565b610408565b6000546040516001600160a01b039091168152602001610146565b610139610426565b6101da6102513660046111c5565b610435565b6101626102643660046111c5565b610447565b6101626102773660046111c5565b6104c6565b6101da61028a366004611296565b6104d3565b6101da61029d366004611302565b6105c6565b6101766102b0366004611375565b61072a565b6101da6102c336600461122b565b610755565b6060600480546102d7906113a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610303906113a8565b80156103505780601f1061032557610100808354040283529160200191610350565b820191906000526020600020905b81548152906001019060200180831161033357829003601f168201915b5050505050905090565b60006103673384846107ce565b5060015b92915050565b600061037e8433846108f3565b61038984848461096d565b5060019392505050565b600061039d610b18565b905090565b3360008181526002602090815260408083206001600160a01b038716845290915281205490916103679185906103d99086906113dc565b6107ce565b6103e6610bca565b6103f08282610c24565b5050565b6103fc610bca565b6104066000610ce5565b565b6001600160a01b03811660009081526007602052604081205461036b565b6060600580546102d7906113a8565b61043d610bca565b6103f08282610d35565b600080610454338561072a565b9050828110156104b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61038933858584036107ce565b600061036733848461096d565b6104db610bca565b60046104e8848683611461565b5060056104f6828483611461565b5060008484604051610509929190611522565b604051908190039020600981905590506105647f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f827f0000000000000000000000000000000000000000000000000000000000000000610e66565b6008556040516105779084908490611522565b6040518091039020858560405161058f929190611522565b604051908190038120907f1ec4c73af923253fb2c28a509dd78d342709289a09929d78c64c0b8e047efbcd90600090a35050505050565b834211156106165760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104b0565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106458c610eaf565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006106a082610ed7565b905060006106b082878787610f25565b9050896001600160a01b0316816001600160a01b0316146107135760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104b0565b61071e8a8a8a6107ce565b50505050505050505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61075d610bca565b6001600160a01b0381166107c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104b0565b6107cb81610ce5565b50565b6001600160a01b0383166108305760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104b0565b6001600160a01b0382166108915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104b0565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006108ff848461072a565b90506000198114610967578181101561095a5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104b0565b61096784848484036107ce565b50505050565b6001600160a01b0383166109d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104b0565b6001600160a01b038216610a335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104b0565b6001600160a01b03831660009081526001602052604090205481811015610aab5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104b0565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0b9086815260200190565b60405180910390a3610967565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610b7157507f000000000000000000000000000000000000000000000000000000000000000046145b15610b7d575060085490565b61039d7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6009547f0000000000000000000000000000000000000000000000000000000000000000610e66565b6000546001600160a01b031633146104065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b0565b6001600160a01b038216610c7a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104b0565b8060036000828254610c8c91906113dc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610d955760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104b0565b6001600160a01b03821660009081526001602052604090205481811015610e095760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104b0565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016108e6565b505050565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061036b610ee4610b18565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000610f3687878787610f4d565b91509150610f4381611011565b5095945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f845750600090506003611008565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fd8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661100157600060019250925050611008565b9150600090505b94509492505050565b600081600481111561102557611025611532565b0361102d5750565b600181600481111561104157611041611532565b0361108e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104b0565b60028160048111156110a2576110a2611532565b036110ef5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104b0565b600381600481111561110357611103611532565b036107cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104b0565b600060208083528351808285015260005b818110156111885785810183015185820160400152820161116c565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146111c057600080fd5b919050565b600080604083850312156111d857600080fd5b6111e1836111a9565b946020939093013593505050565b60008060006060848603121561120457600080fd5b61120d846111a9565b925061121b602085016111a9565b9150604084013590509250925092565b60006020828403121561123d57600080fd5b611246826111a9565b9392505050565b60008083601f84011261125f57600080fd5b50813567ffffffffffffffff81111561127757600080fd5b60208301915083602082850101111561128f57600080fd5b9250929050565b600080600080604085870312156112ac57600080fd5b843567ffffffffffffffff808211156112c457600080fd5b6112d08883890161124d565b909650945060208701359150808211156112e957600080fd5b506112f68782880161124d565b95989497509550505050565b600080600080600080600060e0888a03121561131d57600080fd5b611326886111a9565b9650611334602089016111a9565b95506040880135945060608801359350608088013560ff8116811461135857600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561138857600080fd5b611391836111a9565b915061139f602084016111a9565b90509250929050565b600181811c908216806113bc57607f821691505b602082108103610ed157634e487b7160e01b600052602260045260246000fd5b8082018082111561036b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f821115610e6157600081815260208120601f850160051c8101602086101561143a5750805b601f850160051c820191505b8181101561145957828155600101611446565b505050505050565b67ffffffffffffffff831115611479576114796113fd565b61148d8361148783546113a8565b83611413565b6000601f8411600181146114c157600085156114a95750838201355b600019600387901b1c1916600186901b17835561151b565b600083815260209020601f19861690835b828110156114f257868501358255602094850194600190920191016114d2565b508682101561150f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fdfea26469706673582212208113c928e03165e19b5c7ac5b67b85c32ab586cd042677306fbd142d27afccf664736f6c63430008110033a264697066735822122042090937ba355ddc17492b115056d5eea38b3ad89fb98b1449f0c1ff95beac8564736f6c63430008110033", + "devdoc": { + "events": { + "AssetAdded(bytes32,bytes32,uint32,address,address,address)": { + "params": { + "adoptedAsset": "- The address of the adopted (user-expected) asset", + "caller": "- The account that called the function", + "canonicalId": "- The canonical identifier of the token the local <> adopted AMM is for", + "domain": "- The domain of the canonical token for the local <> adopted amm", + "key": "- The key in the mapping (hash of canonical id and domain)", + "localAsset": "- The address of the local asset" + } + }, + "AssetRemoved(bytes32,address)": { + "params": { + "caller": "- The account that called the function", + "key": "- The hash of the canonical identifier and domain of the token removed" + } + }, + "LiquidityCapUpdated(bytes32,bytes32,uint32,uint256,address)": { + "params": { + "caller": "- The account that called the function", + "canonicalId": "- The canonical identifier of the token the local <> adopted AMM is for", + "cap": "- The newly enforced liquidity cap (if it is 0, no cap is enforced)", + "domain": "- The domain of the canonical token for the local <> adopted amm", + "key": "- The key in the mapping (hash of canonical id and domain)" + } + }, + "StableSwapAdded(bytes32,bytes32,uint32,address,address)": { + "params": { + "caller": "- The account that called the function", + "canonicalId": "- The canonical identifier of the token the local <> adopted AMM is for", + "domain": "- The domain of the canonical token for the local <> adopted amm", + "key": "- The key in the mapping (hash of canonical id and domain)", + "swapPool": "- The address of the AMM" + } + }, + "TokenDeployed(uint32,bytes32,address)": { + "params": { + "domain": "the domain of the chain where the canonical asset is deployed", + "id": "the bytes32 address of the canonical token contract", + "representation": "the address of the newly locally deployed representation contract" + } + } + }, + "kind": "dev", + "methods": { + "addStableSwapPool((uint32,bytes32),address)": { + "details": "Must pass in the _canonical information so it can be emitted in event" + }, + "removeAssetId((uint32,bytes32),address,address)": { + "params": { + "_adoptedAssetId": "- Corresponding adopted asset to remove", + "_canonical": "- The canonical id and domain to remove", + "_representation": "- Corresponding representation asset to remove" + } + }, + "removeAssetId(bytes32,address,address)": { + "params": { + "_adoptedAssetId": "- Corresponding adopted asset to remove", + "_key": "- The hash of the canonical id and domain to remove (mapping key)", + "_representation": "- Corresponding representation asset to remove" + } + }, + "setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)": { + "details": "When allowlisting the canonical asset, all representational assets would be allowlisted as well. In the event you have a different adopted asset (i.e. PoS USDC on polygon), you should *not* allowlist the adopted asset. The stable swap pool address used should allow you to swap between the local <> adopted asset. If a representation has been deployed at any point, `setupAssetWithDeployedRepresentation` should be used instead. The following can only be added on *REMOTE* domains: - `_adoptedAssetId` - `_stableSwapPool` Whereas the `_cap` can only be added on the canonical domain", + "params": { + "_adoptedAssetId": "- The used asset id for this domain (e.g. PoS USDC for polygon)", + "_canonical": "- The canonical asset to add by id and domain. All representations will be allowlisted as well", + "_canonicalDecimals": "- The decimals of the canonical asset (will be used for deployed representation)", + "_representationName": "- The name to be used for the deployed asset", + "_representationSymbol": "- The symbol used for the deployed asset", + "_stableSwapPool": "- The address of the local stableswap pool, if it exists." + } + }, + "setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)": { + "details": "This function does very minimal checks to ensure the correct `_representation` token is used. The only enforced checks are: - Bridge can mint, and balance of bridge will increase - Bridge can burn, and balance of bridge will decrease However, there are many things that must be checked manually to avoid enrolling a bad representation: - decimals must always be equal to canonical decimals - regular `mint`, `burn`, `ERC20` functionality could be implemented improperly - the required interface functions (see `IBridgeToken`) may not be implemented - upgradeability could interfere with required functionality Using this method allows admins to override existing local tokens, and should be used carefully.", + "params": { + "_adoptedAssetId": "- The used asset id for this domain (e.g. PoS USDC for polygon)", + "_canonical": "- The canonical asset to add by id and domain. All representations will be whitelisted as well", + "_representation": "- The address of the representative asset", + "_stableSwapPool": "- The address of the local stableswap pool, if it exists." + } + }, + "updateDetails((uint32,bytes32),string,string)": { + "params": { + "_canonical": "- The canonical id and domain to remove", + "_name": "- The new name", + "_symbol": "- The new symbol" + } + }, + "updateLiquidityCap((uint32,bytes32),uint256)": { + "details": "Must pass in the _canonical information so it can be emitted in event" + } + }, + "version": 1 + }, + "userdoc": { + "events": { + "AssetAdded(bytes32,bytes32,uint32,address,address,address)": { + "notice": "Emitted when a new asset is added" + }, + "AssetRemoved(bytes32,address)": { + "notice": "Emitted when an asset is removed from allowlists" + }, + "LiquidityCapUpdated(bytes32,bytes32,uint32,uint256,address)": { + "notice": "Emitted when a liquidity cap is updated" + }, + "StableSwapAdded(bytes32,bytes32,uint32,address,address)": { + "notice": "Emitted when a new stable-swap AMM is added for the local <> adopted token" + }, + "TokenDeployed(uint32,bytes32,address)": { + "notice": "emitted when a representation token contract is deployed" + } + }, + "kind": "user", + "methods": { + "addStableSwapPool((uint32,bytes32),address)": { + "notice": "Adds a stable swap pool for the local <> adopted asset." + }, + "removeAssetId((uint32,bytes32),address,address)": { + "notice": "Used to remove assets from the allowlist" + }, + "removeAssetId(bytes32,address,address)": { + "notice": "Used to remove assets from the allowlist" + }, + "setupAsset((uint32,bytes32),uint8,string,string,address,address,uint256)": { + "notice": "Used to add supported assets. This is an admin only function" + }, + "setupAssetWithDeployedRepresentation((uint32,bytes32),address,address,address)": { + "notice": "Used to add supported assets, without deploying a unique representation asset, and instead using what admins have provided. This is an admin only function" + }, + "updateDetails((uint32,bytes32),string,string)": { + "notice": "Used to update the name and symbol of a local token" + }, + "updateLiquidityCap((uint32,bytes32),uint256)": { + "notice": "Adds a stable swap pool for the local <> adopted asset." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5874, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "s", + "offset": 0, + "slot": "0", + "type": "t_struct(AppStorage)23688_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_address)dyn_storage": { + "base": "t_address", + "encoding": "dynamic_array", + "label": "address[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IERC20)2960)dyn_storage": { + "base": "t_contract(IERC20)2960", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IConnectorManager)46699": { + "encoding": "inplace", + "label": "contract IConnectorManager", + "numberOfBytes": "20" + }, + "t_contract(IERC20)2960": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(LPToken)15569": { + "encoding": "inplace", + "label": "contract LPToken", + "numberOfBytes": "20" + }, + "t_enum(DestinationTransferStatus)23476": { + "encoding": "inplace", + "label": "enum DestinationTransferStatus", + "numberOfBytes": "1" + }, + "t_enum(Role)23471": { + "encoding": "inplace", + "label": "enum Role", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_enum(Role)23471)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => enum Role)", + "numberOfBytes": "32", + "value": "t_enum(Role)23471" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_address,t_struct(RouterConfig)23530_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RouterConfig)", + "numberOfBytes": "32", + "value": "t_struct(RouterConfig)23530_storage" + }, + "t_mapping(t_address,t_struct(TokenId)31880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct TokenId)", + "numberOfBytes": "32", + "value": "t_struct(TokenId)31880_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_address,t_uint8)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint8)", + "numberOfBytes": "32", + "value": "t_uint8" + }, + "t_mapping(t_bytes32,t_array(t_address)dyn_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address[])", + "numberOfBytes": "32", + "value": "t_array(t_address)dyn_storage" + }, + "t_mapping(t_bytes32,t_bool)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => enum DestinationTransferStatus)", + "numberOfBytes": "32", + "value": "t_enum(DestinationTransferStatus)23476" + }, + "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(address => uint8))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint8)" + }, + "t_mapping(t_bytes32,t_struct(Swap)24938_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct SwapUtils.Swap)", + "numberOfBytes": "32", + "value": "t_struct(Swap)24938_storage" + }, + "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TokenConfig)", + "numberOfBytes": "32", + "value": "t_struct(TokenConfig)23547_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint32,t_bytes32)": { + "encoding": "mapping", + "key": "t_uint32", + "label": "mapping(uint32 => bytes32)", + "numberOfBytes": "32", + "value": "t_bytes32" + }, + "t_struct(AppStorage)23688_storage": { + "encoding": "inplace", + "label": "struct AppStorage", + "members": [ + { + "astId": 23549, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23551, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "LIQUIDITY_FEE_NUMERATOR", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 23554, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "relayerFeeVault", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23557, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "nonce", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23560, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "domain", + "offset": 0, + "slot": "4", + "type": "t_uint32" + }, + { + "astId": 23566, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "adoptedToCanonical", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23572, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "representationToCanonical", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_struct(TokenId)31880_storage)" + }, + { + "astId": 23578, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "tokenConfigs", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_bytes32,t_struct(TokenConfig)23547_storage)" + }, + { + "astId": 23584, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "transferStatus", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_bytes32,t_enum(DestinationTransferStatus)23476)" + }, + { + "astId": 23590, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "routedTransfers", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_bytes32,t_array(t_address)dyn_storage)" + }, + { + "astId": 23597, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "routerBalances", + "offset": 0, + "slot": "10", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" + }, + { + "astId": 23602, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "approvedRelayers", + "offset": 0, + "slot": "11", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23605, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "maxRoutersPerTransfer", + "offset": 0, + "slot": "12", + "type": "t_uint256" + }, + { + "astId": 23610, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "slippage", + "offset": 0, + "slot": "13", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23615, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "receiveLocalOverride", + "offset": 0, + "slot": "14", + "type": "t_mapping(t_bytes32,t_bool)" + }, + { + "astId": 23620, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "remotes", + "offset": 0, + "slot": "15", + "type": "t_mapping(t_uint32,t_bytes32)" + }, + { + "astId": 23622, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "_proposed", + "offset": 0, + "slot": "16", + "type": "t_address" + }, + { + "astId": 23624, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "17", + "type": "t_uint256" + }, + { + "astId": 23626, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "_routerAllowlistRemoved", + "offset": 0, + "slot": "18", + "type": "t_bool" + }, + { + "astId": 23628, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "_routerAllowlistTimestamp", + "offset": 0, + "slot": "19", + "type": "t_uint256" + }, + { + "astId": 23634, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "roles", + "offset": 0, + "slot": "20", + "type": "t_mapping(t_address,t_enum(Role)23471)" + }, + { + "astId": 23639, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "routerConfigs", + "offset": 0, + "slot": "21", + "type": "t_mapping(t_address,t_struct(RouterConfig)23530_storage)" + }, + { + "astId": 23641, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "_status", + "offset": 0, + "slot": "22", + "type": "t_uint256" + }, + { + "astId": 23643, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "_xcallStatus", + "offset": 0, + "slot": "23", + "type": "t_uint256" + }, + { + "astId": 23649, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "swapStorages", + "offset": 0, + "slot": "24", + "type": "t_mapping(t_bytes32,t_struct(Swap)24938_storage)" + }, + { + "astId": 23656, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "tokenIndexes", + "offset": 0, + "slot": "25", + "type": "t_mapping(t_bytes32,t_mapping(t_address,t_uint8))" + }, + { + "astId": 23659, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "lpTokenTargetAddress", + "offset": 0, + "slot": "26", + "type": "t_address" + }, + { + "astId": 23662, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "_paused", + "offset": 20, + "slot": "26", + "type": "t_bool" + }, + { + "astId": 23665, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "aavePool", + "offset": 0, + "slot": "27", + "type": "t_address" + }, + { + "astId": 23668, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "aavePortalFeeNumerator", + "offset": 0, + "slot": "28", + "type": "t_uint256" + }, + { + "astId": 23673, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "portalDebt", + "offset": 0, + "slot": "29", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23678, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "portalFeeDebt", + "offset": 0, + "slot": "30", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 23683, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "approvedSequencers", + "offset": 0, + "slot": "31", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23687, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "xAppConnectionManager", + "offset": 0, + "slot": "32", + "type": "t_contract(IConnectorManager)46699" + } + ], + "numberOfBytes": "1056" + }, + "t_struct(RouterConfig)23530_storage": { + "encoding": "inplace", + "label": "struct RouterConfig", + "members": [ + { + "astId": 23519, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "approved", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23521, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "portalApproved", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 23523, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23525, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "recipient", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23527, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "proposed", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23529, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "proposedTimestamp", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Swap)24938_storage": { + "encoding": "inplace", + "label": "struct SwapUtils.Swap", + "members": [ + { + "astId": 24905, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "key", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 24907, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "initialA", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 24909, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "futureA", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 24911, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "initialATime", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 24913, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "futureATime", + "offset": 0, + "slot": "4", + "type": "t_uint256" + }, + { + "astId": 24915, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "swapFee", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 24917, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "adminFee", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 24920, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "lpToken", + "offset": 0, + "slot": "7", + "type": "t_contract(LPToken)15569" + }, + { + "astId": 24924, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "pooledTokens", + "offset": 0, + "slot": "8", + "type": "t_array(t_contract(IERC20)2960)dyn_storage" + }, + { + "astId": 24927, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "tokenPrecisionMultipliers", + "offset": 0, + "slot": "9", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24930, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "balances", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24933, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "adminFees", + "offset": 0, + "slot": "11", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 24935, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "disabled", + "offset": 0, + "slot": "12", + "type": "t_bool" + }, + { + "astId": 24937, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "removeTime", + "offset": 0, + "slot": "13", + "type": "t_uint256" + } + ], + "numberOfBytes": "448" + }, + "t_struct(TokenConfig)23547_storage": { + "encoding": "inplace", + "label": "struct TokenConfig", + "members": [ + { + "astId": 23532, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "representation", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23534, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "representationDecimals", + "offset": 20, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 23536, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "adopted", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23538, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "adoptedDecimals", + "offset": 20, + "slot": "1", + "type": "t_uint8" + }, + { + "astId": 23540, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "adoptedToLocalExternalPools", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23542, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "approval", + "offset": 20, + "slot": "2", + "type": "t_bool" + }, + { + "astId": 23544, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "cap", + "offset": 0, + "slot": "3", + "type": "t_uint256" + }, + { + "astId": 23546, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "custodied", + "offset": 0, + "slot": "4", + "type": "t_uint256" + } + ], + "numberOfBytes": "160" + }, + "t_struct(TokenId)31880_storage": { + "encoding": "inplace", + "label": "struct TokenId", + "members": [ + { + "astId": 31877, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "domain", + "offset": 0, + "slot": "0", + "type": "t_uint32" + }, + { + "astId": 31879, + "contract": "contracts/core/connext/facets/TokenFacet.sol:TokenFacet", + "label": "id", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint32": { + "encoding": "inplace", + "label": "uint32", + "numberOfBytes": "4" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/UpgradeBeaconControllerStaging.json b/packages/deployments/contracts/deployments/fraxtal/UpgradeBeaconControllerStaging.json new file mode 100644 index 0000000000..ea33171c59 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/UpgradeBeaconControllerStaging.json @@ -0,0 +1,331 @@ +{ + "address": "0x20098c6d481225fF5D9b2ca84cF68FC683e21031", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x4d563bef04200c251bcd2f3c671864abb74935ece55c047ce211b3f564b6a30f", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x20098c6d481225fF5D9b2ca84cF68FC683e21031", + "transactionIndex": 1, + "gasUsed": "414221", + "logsBloom": "0x00000002000000000000000000000000000000000000400000800000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000400000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6da28bf60c0ce2a5772c722f32c1b953aff719ab375d34e63e765b1283dfde09", + "transactionHash": "0x4d563bef04200c251bcd2f3c671864abb74935ece55c047ce211b3f564b6a30f", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2889674, + "transactionHash": "0x4d563bef04200c251bcd2f3c671864abb74935ece55c047ce211b3f564b6a30f", + "address": "0x20098c6d481225fF5D9b2ca84cF68FC683e21031", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x6da28bf60c0ce2a5772c722f32c1b953aff719ab375d34e63e765b1283dfde09" + } + ], + "blockNumber": 2889674, + "cumulativeGasUsed": "464783", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "39fed2dc68f44aad166cf7deed68715d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This implementation is a minimal version inspired by 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.solDo *NOT* remove ownership unless all UpgradeBeacons registered with this controller are willing to lose upgradeability.\",\"kind\":\"dev\",\"methods\":{\"upgrade(address,address)\":{\"params\":{\"_beacon\":\"Address of the UpgradeBeacon which will be updated\",\"_implementation\":\"Address of the Implementation contract to upgrade the Beacon to\"}}},\"title\":\"UpgradeBeaconController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"upgrade(address,address)\":{\"notice\":\"Modify the implementation stored in the UpgradeBeacon, which will upgrade the implementation used by all Proxy contracts using that UpgradeBeacon\"}},\"notice\":\"Set as the controller of UpgradeBeacon contract(s), capable of changing their stored implementation address.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/upgrade/UpgradeBeaconController.sol\":\"UpgradeBeaconController\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n // ========== Custom Errors ===========\\n\\n error ProposedOwnable__onlyOwner_notOwner();\\n error ProposedOwnable__onlyProposed_notProposedOwner();\\n error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n error ProposedOwnable__proposeNewOwner_invalidProposal();\\n error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n error ProposedOwnable__renounceOwnership_noProposal();\\n error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // ============ Properties ============\\n\\n address private _owner;\\n\\n address private _proposed;\\n uint256 private _proposedOwnershipTimestamp;\\n\\n uint256 private constant _delay = 7 days;\\n\\n // ======== Getters =========\\n\\n /**\\n * @notice Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposed() public view virtual returns (address) {\\n return _proposed;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposedTimestamp() public view virtual returns (uint256) {\\n return _proposedOwnershipTimestamp;\\n }\\n\\n /**\\n * @notice Returns the delay period before a new owner can be accepted.\\n */\\n function delay() public view virtual returns (uint256) {\\n return _delay;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if the ownership delay has not elapsed\\n */\\n modifier ownershipDelayElapsed() {\\n // Ensure delay has elapsed\\n if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n _;\\n }\\n\\n /**\\n * @notice Indicates if the ownership has been renounced() by\\n * checking if current owner is address(0)\\n */\\n function renounced() public view returns (bool) {\\n return _owner == address(0);\\n }\\n\\n // ======== External =========\\n\\n /**\\n * @notice Sets the timestamp for an owner to be proposed, and sets the\\n * newly proposed owner as step 1 in a 2-step process\\n */\\n function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n // Contract as source of truth\\n if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n // Sanity check: reasonable proposal\\n if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n _setProposed(newlyProposed);\\n }\\n\\n /**\\n * @notice Renounces ownership of the contract after a delay\\n */\\n function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n // Ensure there has been a proposal cycle started\\n if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n // Require proposed is set to 0\\n if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(address(0));\\n }\\n\\n /**\\n * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n // NOTE: no need to check if _owner == _proposed, because the _proposed\\n // is 0-d out and this check is implicitly enforced by modifier\\n\\n // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n // the only time this would happen is if the _proposed was never\\n // set (will fail from modifier) or if the owner == _proposed (checked\\n // above)\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(_proposed);\\n }\\n\\n // ======== Internal =========\\n\\n function _setOwner(address newOwner) internal {\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n delete _proposedOwnershipTimestamp;\\n delete _proposed;\\n }\\n\\n function _setProposed(address newlyProposed) private {\\n _proposedOwnershipTimestamp = block.timestamp;\\n _proposed = newlyProposed;\\n emit OwnershipProposed(newlyProposed);\\n }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n /**\\n * @dev This emits when change in ownership of a contract is proposed.\\n */\\n event OwnershipProposed(address indexed proposedOwner);\\n\\n /**\\n * @dev This emits when ownership of a contract changes.\\n */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @notice Get the address of the owner\\n * @return owner_ The address of the owner.\\n */\\n function owner() external view returns (address owner_);\\n\\n /**\\n * @notice Get the address of the proposed owner\\n * @return proposed_ The address of the proposed.\\n */\\n function proposed() external view returns (address proposed_);\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n * @param newlyProposed The proposed new owner of the contract\\n */\\n function proposeNewOwner(address newlyProposed) external;\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n */\\n function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/upgrade/UpgradeBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ External Imports ============\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title UpgradeBeacon\\n * @notice Stores the address of an implementation contract\\n * and allows a controller to upgrade the implementation address\\n * @dev This implementation combines the gas savings of having no function selectors\\n * found in 0age's implementation:\\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol\\n * With the added niceties of a safety check that each implementation is a contract\\n * and an Upgrade event emitted each time the implementation is changed\\n * found in OpenZeppelin's implementation:\\n * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol\\n */\\ncontract UpgradeBeacon {\\n // ============ Immutables ============\\n\\n // The controller is capable of modifying the implementation address\\n address private immutable controller;\\n\\n // ============ Private Storage Variables ============\\n\\n // The implementation address is held in storage slot zero.\\n address private implementation;\\n\\n // ============ Events ============\\n\\n // Upgrade event is emitted each time the implementation address is set\\n // (including deployment)\\n event Upgrade(address indexed implementation);\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Validate the initial implementation and store it.\\n * Store the controller immutably.\\n * @param _initialImplementation Address of the initial implementation contract\\n * @param _controller Address of the controller who can upgrade the implementation\\n */\\n constructor(address _initialImplementation, address _controller) payable {\\n _setImplementation(_initialImplementation);\\n controller = _controller;\\n }\\n\\n // ============ External Functions ============\\n\\n /**\\n * @notice For all callers except the controller, return the current implementation address.\\n * If called by the Controller, update the implementation address\\n * to the address passed in the calldata.\\n * Note: this requires inline assembly because Solidity fallback functions\\n * do not natively take arguments or return values.\\n */\\n fallback() external payable {\\n if (msg.sender != controller) {\\n // if not called by the controller,\\n // load implementation address from storage slot zero\\n // and return it.\\n assembly {\\n mstore(0, sload(0))\\n return(0, 32)\\n }\\n } else {\\n // if called by the controller,\\n // load new implementation address from the first word of the calldata\\n address _newImplementation;\\n assembly {\\n _newImplementation := calldataload(0)\\n }\\n // set the new implementation\\n _setImplementation(_newImplementation);\\n }\\n }\\n\\n // ============ Private Functions ============\\n\\n /**\\n * @notice Perform checks on the new implementation address\\n * then upgrade the stored implementation.\\n * @param _newImplementation Address of the new implementation contract which will replace the old one\\n */\\n function _setImplementation(address _newImplementation) private {\\n // Require that the new implementation is different from the current one\\n require(implementation != _newImplementation, \\\"!upgrade\\\");\\n // Require that the new implementation is a contract\\n require(Address.isContract(_newImplementation), \\\"implementation !contract\\\");\\n // set the new implementation\\n implementation = _newImplementation;\\n emit Upgrade(_newImplementation);\\n }\\n}\\n\",\"keccak256\":\"0x5e1831c308ec61d9ea9294343a280e1683c4ef8c12fb30dd02c2fff8050529c2\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/upgrade/UpgradeBeaconController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============ Internal Imports ============\\nimport {ProposedOwnable} from \\\"../ProposedOwnable.sol\\\";\\n\\nimport {UpgradeBeacon} from \\\"./UpgradeBeacon.sol\\\";\\n\\n// ============ External Imports ============\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title UpgradeBeaconController\\n * @notice Set as the controller of UpgradeBeacon contract(s),\\n * capable of changing their stored implementation address.\\n * @dev This implementation is a minimal version inspired by 0age's implementation:\\n * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.sol\\n *\\n * @dev Do *NOT* remove ownership unless all UpgradeBeacons registered with this controller\\n * are willing to lose upgradeability.\\n */\\ncontract UpgradeBeaconController is ProposedOwnable {\\n // ============ Events ============\\n\\n event BeaconUpgraded(address indexed beacon, address implementation);\\n\\n // ============ Constructor ============\\n constructor() {\\n _setOwner(msg.sender);\\n }\\n\\n // ============ External Functions ============\\n\\n /**\\n * @notice Modify the implementation stored in the UpgradeBeacon,\\n * which will upgrade the implementation used by all\\n * Proxy contracts using that UpgradeBeacon\\n * @param _beacon Address of the UpgradeBeacon which will be updated\\n * @param _implementation Address of the Implementation contract to upgrade the Beacon to\\n */\\n function upgrade(address _beacon, address _implementation) external onlyOwner {\\n // Require that the beacon is a contract\\n require(Address.isContract(_beacon), \\\"beacon !contract\\\");\\n // Call into beacon and supply address of new implementation to update it.\\n (bool _success, ) = _beacon.call(abi.encode(_implementation));\\n // Revert with message on failure (i.e. if the beacon is somehow incorrect).\\n if (!_success) {\\n assembly {\\n returndatacopy(0, 0, returndatasize())\\n revert(0, returndatasize())\\n }\\n }\\n emit BeaconUpgraded(_beacon, _implementation);\\n }\\n}\\n\",\"keccak256\":\"0xfb97bb98871886876513fa63ddf1ac6334d39935490d63ff62627a053b965c94\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b610084565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6105fc806100936000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806399a88ec41161006657806399a88ec4146100e7578063b1f8100d146100fa578063c5b350df1461010d578063d1851c9214610115578063d232c2201461012657600080fd5b80633cf52ffb146100985780636a42b8f8146100af578063715018a6146100b85780638da5cb5b146100c2575b600080fd5b6002545b6040519081526020015b60405180910390f35b62093a8061009c565b6100c0610142565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100a6565b6100c06100f536600461051b565b6101f6565b6100c061010836600461054e565b61033f565b6100c06103e0565b6001546001600160a01b03166100cf565b6000546040516001600160a01b039091161581526020016100a6565b6000546001600160a01b0316331461016d576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261017f9190610570565b1161019d576040516324e0285f60e21b815260040160405180910390fd5b6002546000036101c057604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156101ea576040516323295ef960e01b815260040160405180910390fd5b6101f4600061044c565b565b6000546001600160a01b03163314610221576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0382163b61026f5760405162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015260640160405180910390fd5b604080516001600160a01b038381166020830152600092908516910160408051601f19818403018152908290526102a591610597565b6000604051808303816000865af19150503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806102fa573d6000803e3d6000fd5b6040516001600160a01b0383811682528416907fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09060200160405180910390a2505050565b6000546001600160a01b0316331461036a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610388575060025415155b156103a6576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036103d457604051634a2fb73f60e11b815260040160405180910390fd5b6103dd816104b1565b50565b6001546001600160a01b0316331461040b576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261041d9190610570565b1161043b576040516324e0285f60e21b815260040160405180910390fd5b6001546101f4906001600160a01b03165b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b80356001600160a01b038116811461051657600080fd5b919050565b6000806040838503121561052e57600080fd5b610537836104ff565b9150610545602084016104ff565b90509250929050565b60006020828403121561056057600080fd5b610569826104ff565b9392505050565b8181038181111561059157634e487b7160e01b600052601160045260246000fd5b92915050565b6000825160005b818110156105b8576020818601810151858301520161059e565b50600092019182525091905056fea264697066735822122039269d083e3db75bcbcc7fb26455b52eb4dea57d3d00075d9f7660186c344aaf64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c806399a88ec41161006657806399a88ec4146100e7578063b1f8100d146100fa578063c5b350df1461010d578063d1851c9214610115578063d232c2201461012657600080fd5b80633cf52ffb146100985780636a42b8f8146100af578063715018a6146100b85780638da5cb5b146100c2575b600080fd5b6002545b6040519081526020015b60405180910390f35b62093a8061009c565b6100c0610142565b005b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100a6565b6100c06100f536600461051b565b6101f6565b6100c061010836600461054e565b61033f565b6100c06103e0565b6001546001600160a01b03166100cf565b6000546040516001600160a01b039091161581526020016100a6565b6000546001600160a01b0316331461016d576040516311a8a1bb60e31b815260040160405180910390fd5b62093a806002544261017f9190610570565b1161019d576040516324e0285f60e21b815260040160405180910390fd5b6002546000036101c057604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b0316156101ea576040516323295ef960e01b815260040160405180910390fd5b6101f4600061044c565b565b6000546001600160a01b03163314610221576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b0382163b61026f5760405162461bcd60e51b815260206004820152601060248201526f18995858dbdb880858dbdb9d1c9858dd60821b604482015260640160405180910390fd5b604080516001600160a01b038381166020830152600092908516910160408051601f19818403018152908290526102a591610597565b6000604051808303816000865af19150503d80600081146102e2576040519150601f19603f3d011682016040523d82523d6000602084013e6102e7565b606091505b50509050806102fa573d6000803e3d6000fd5b6040516001600160a01b0383811682528416907fc945ae30494f6ee00b9e4bf1fec5653ced7244b559666f44f9a88ea732e957b09060200160405180910390a2505050565b6000546001600160a01b0316331461036a576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610388575060025415155b156103a6576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b038083169116036103d457604051634a2fb73f60e11b815260040160405180910390fd5b6103dd816104b1565b50565b6001546001600160a01b0316331461040b576040516311a7f27160e11b815260040160405180910390fd5b62093a806002544261041d9190610570565b1161043b576040516324e0285f60e21b815260040160405180910390fd5b6001546101f4906001600160a01b03165b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b80356001600160a01b038116811461051657600080fd5b919050565b6000806040838503121561052e57600080fd5b610537836104ff565b9150610545602084016104ff565b90509250929050565b60006020828403121561056057600080fd5b610569826104ff565b9392505050565b8181038181111561059157634e487b7160e01b600052601160045260246000fd5b92915050565b6000825160005b818110156105b8576020818601810151858301520161059e565b50600092019182525091905056fea264697066735822122039269d083e3db75bcbcc7fb26455b52eb4dea57d3d00075d9f7660186c344aaf64736f6c63430008110033", + "devdoc": { + "details": "This implementation is a minimal version inspired by 0age's implementation: https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/upgradeability/DharmaUpgradeBeaconController.solDo *NOT* remove ownership unless all UpgradeBeacons registered with this controller are willing to lose upgradeability.", + "kind": "dev", + "methods": { + "upgrade(address,address)": { + "params": { + "_beacon": "Address of the UpgradeBeacon which will be updated", + "_implementation": "Address of the Implementation contract to upgrade the Beacon to" + } + } + }, + "title": "UpgradeBeaconController", + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "acceptProposedOwner()": { + "notice": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "delay()": { + "notice": "Returns the delay period before a new owner can be accepted." + }, + "owner()": { + "notice": "Returns the address of the current owner." + }, + "proposeNewOwner(address)": { + "notice": "Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process" + }, + "proposed()": { + "notice": "Returns the address of the proposed owner." + }, + "proposedTimestamp()": { + "notice": "Returns the address of the proposed owner." + }, + "renounceOwnership()": { + "notice": "Renounces ownership of the contract after a delay" + }, + "renounced()": { + "notice": "Indicates if the ownership has been renounced() by checking if current owner is address(0)" + }, + "upgrade(address,address)": { + "notice": "Modify the implementation stored in the UpgradeBeacon, which will upgrade the implementation used by all Proxy contracts using that UpgradeBeacon" + } + }, + "notice": "Set as the controller of UpgradeBeacon contract(s), capable of changing their stored implementation address.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 49880, + "contract": "contracts/shared/upgrade/UpgradeBeaconController.sol:UpgradeBeaconController", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 49882, + "contract": "contracts/shared/upgrade/UpgradeBeaconController.sol:UpgradeBeaconController", + "label": "_proposed", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 49884, + "contract": "contracts/shared/upgrade/UpgradeBeaconController.sol:UpgradeBeaconController", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/WatcherManagerStaging.json b/packages/deployments/contracts/deployments/fraxtal/WatcherManagerStaging.json new file mode 100644 index 0000000000..820502f7a7 --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/WatcherManagerStaging.json @@ -0,0 +1,383 @@ +{ + "address": "0x35866ab2D6BAdFF580895c883a4535e928AB7db9", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "WatcherAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "watcher", + "type": "address" + } + ], + "name": "WatcherRemoved", + "type": "event" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "addWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "isWatcher", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_watcher", + "type": "address" + } + ], + "name": "removeWatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x831a80dfef319f95a7bc1b114a55372637a51c776b1d50f2be3bc2a50d814fef", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x35866ab2D6BAdFF580895c883a4535e928AB7db9", + "transactionIndex": 1, + "gasUsed": "413897", + "logsBloom": "0x00000000000000000000000000000000000000000000400000800000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000001000000000000000000020000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x43c352f167922efcbdae5f8c70dfe967d8c92b5d1172ab62f8c37406cb2a0e78", + "transactionHash": "0x831a80dfef319f95a7bc1b114a55372637a51c776b1d50f2be3bc2a50d814fef", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2657640, + "transactionHash": "0x831a80dfef319f95a7bc1b114a55372637a51c776b1d50f2be3bc2a50d814fef", + "address": "0x35866ab2D6BAdFF580895c883a4535e928AB7db9", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x43c352f167922efcbdae5f8c70dfe967d8c92b5d1172ab62f8c37406cb2a0e78" + } + ], + "blockNumber": 2657640, + "cumulativeGasUsed": "464459", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "dd554adc81396e5175040a2eb9916e3d", + "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcher\",\"type\":\"address\"}],\"name\":\"WatcherAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"watcher\",\"type\":\"address\"}],\"name\":\"WatcherRemoved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcher\",\"type\":\"address\"}],\"name\":\"addWatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWatcher\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_watcher\",\"type\":\"address\"}],\"name\":\"removeWatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addWatcher(address)\":{\"details\":\"Owner can enroll a watcher (abilities are defined by inheriting contracts)\"},\"removeWatcher(address)\":{\"details\":\"Owner can unenroll a watcher (abilities are defined by inheriting contracts)\"},\"renounceOwnership()\":{\"details\":\"Renounce ownership should be impossible as long as the watcher griefing vector exists. You can still propose `address(0)`, but it will never be accepted.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"renounceOwnership()\":{\"notice\":\"Remove ability to renounce ownership\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"}},\"notice\":\"This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can inherit to make use of the same watcher set.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/messaging/WatcherManager.sol\":\"WatcherManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n // ============ Events ============\\n event WatcherAdded(address watcher);\\n\\n event WatcherRemoved(address watcher);\\n\\n // ============ Properties ============\\n mapping(address => bool) public isWatcher;\\n\\n // ============ Constructor ============\\n constructor() ProposedOwnable() {\\n _setOwner(msg.sender);\\n }\\n\\n // ============ Modifiers ============\\n\\n // ============ Admin fns ============\\n /**\\n * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n */\\n function addWatcher(address _watcher) external onlyOwner {\\n require(!isWatcher[_watcher], \\\"already watcher\\\");\\n isWatcher[_watcher] = true;\\n emit WatcherAdded(_watcher);\\n }\\n\\n /**\\n * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n */\\n function removeWatcher(address _watcher) external onlyOwner {\\n require(isWatcher[_watcher], \\\"!exist\\\");\\n delete isWatcher[_watcher];\\n emit WatcherRemoved(_watcher);\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as the watcher griefing\\n * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n */\\n function renounceOwnership() public virtual override onlyOwner {\\n require(false, \\\"prohibited\\\");\\n }\\n}\\n\",\"keccak256\":\"0x31457ca4d8f4f3270d6cc85e049f2ebf134bd094c995ad0856892d23dd8cdf84\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n // ========== Custom Errors ===========\\n\\n error ProposedOwnable__onlyOwner_notOwner();\\n error ProposedOwnable__onlyProposed_notProposedOwner();\\n error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n error ProposedOwnable__proposeNewOwner_invalidProposal();\\n error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n error ProposedOwnable__renounceOwnership_noProposal();\\n error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // ============ Properties ============\\n\\n address private _owner;\\n\\n address private _proposed;\\n uint256 private _proposedOwnershipTimestamp;\\n\\n uint256 private constant _delay = 7 days;\\n\\n // ======== Getters =========\\n\\n /**\\n * @notice Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposed() public view virtual returns (address) {\\n return _proposed;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposedTimestamp() public view virtual returns (uint256) {\\n return _proposedOwnershipTimestamp;\\n }\\n\\n /**\\n * @notice Returns the delay period before a new owner can be accepted.\\n */\\n function delay() public view virtual returns (uint256) {\\n return _delay;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if the ownership delay has not elapsed\\n */\\n modifier ownershipDelayElapsed() {\\n // Ensure delay has elapsed\\n if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n _;\\n }\\n\\n /**\\n * @notice Indicates if the ownership has been renounced() by\\n * checking if current owner is address(0)\\n */\\n function renounced() public view returns (bool) {\\n return _owner == address(0);\\n }\\n\\n // ======== External =========\\n\\n /**\\n * @notice Sets the timestamp for an owner to be proposed, and sets the\\n * newly proposed owner as step 1 in a 2-step process\\n */\\n function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n // Contract as source of truth\\n if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n // Sanity check: reasonable proposal\\n if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n _setProposed(newlyProposed);\\n }\\n\\n /**\\n * @notice Renounces ownership of the contract after a delay\\n */\\n function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n // Ensure there has been a proposal cycle started\\n if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n // Require proposed is set to 0\\n if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(address(0));\\n }\\n\\n /**\\n * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n // NOTE: no need to check if _owner == _proposed, because the _proposed\\n // is 0-d out and this check is implicitly enforced by modifier\\n\\n // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n // the only time this would happen is if the _proposed was never\\n // set (will fail from modifier) or if the owner == _proposed (checked\\n // above)\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(_proposed);\\n }\\n\\n // ======== Internal =========\\n\\n function _setOwner(address newOwner) internal {\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n delete _proposedOwnershipTimestamp;\\n delete _proposed;\\n }\\n\\n function _setProposed(address newlyProposed) private {\\n _proposedOwnershipTimestamp = block.timestamp;\\n _proposed = newlyProposed;\\n emit OwnershipProposed(newlyProposed);\\n }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n /**\\n * @dev This emits when change in ownership of a contract is proposed.\\n */\\n event OwnershipProposed(address indexed proposedOwner);\\n\\n /**\\n * @dev This emits when ownership of a contract changes.\\n */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @notice Get the address of the owner\\n * @return owner_ The address of the owner.\\n */\\n function owner() external view returns (address owner_);\\n\\n /**\\n * @notice Get the address of the proposed owner\\n * @return proposed_ The address of the proposed.\\n */\\n function proposed() external view returns (address proposed_);\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n * @param newlyProposed The proposed new owner of the contract\\n */\\n function proposeNewOwner(address newlyProposed) external;\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n */\\n function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b610084565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b6105fa806100936000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b1461011e578063b1f8100d14610143578063c5b350df14610156578063d1851c921461015e578063d232c2201461016f578063ec2b13451461018157600080fd5b806324bdff8c146100ae5780633cf52ffb146100c35780636a42b8f8146100da578063715018a6146100e357806384785ecd146100eb575b600080fd5b6100c16100bc36600461056d565b610194565b005b6002545b6040519081526020015b60405180910390f35b62093a806100c7565b6100c161027a565b61010e6100f936600461056d565b60036020526000908152604090205460ff1681565b60405190151581526020016100d1565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100d1565b6100c161015136600461056d565b6102dc565b6100c161037d565b6001546001600160a01b031661012b565b6000546001600160a01b03161561010e565b6100c161018f36600461056d565b6103ed565b6000546001600160a01b031633146101bf576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff161561021f5760405162461bcd60e51b815260206004820152600f60248201526e30b63932b0b23c903bb0ba31b432b960891b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260036020908152604091829020805460ff1916600117905590519182527fbd71030f437353231b6e5bedade573b1e0da5cb6e8bdde37c33c1fea986c29c791015b60405180910390a150565b6000546001600160a01b031633146102a5576040516311a8a1bb60e31b815260040160405180910390fd5b60405162461bcd60e51b815260206004820152600a6024820152691c1c9bda1a589a5d195960b21b6044820152606401610216565b565b6000546001600160a01b03163314610307576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610325575060025415155b15610343576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361037157604051634a2fb73f60e11b815260040160405180910390fd5b61037a816104ba565b50565b6001546001600160a01b031633146103a8576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426103ba919061059d565b116103d8576040516324e0285f60e21b815260040160405180910390fd5b6001546102da906001600160a01b0316610508565b6000546001600160a01b03163314610418576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff166104695760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610216565b6001600160a01b038116600081815260036020908152604091829020805460ff1916905590519182527ffa8eab6357bec870e7048c2413cbaa813236bb29ebac113541a76fef429e94dc910161026f565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006020828403121561057f57600080fd5b81356001600160a01b038116811461059657600080fd5b9392505050565b818103818111156105be57634e487b7160e01b600052601160045260246000fd5b9291505056fea26469706673582212203062aca59eb8d126511deacd14118a20eb90f63721de93f013330a1f1503a78f64736f6c63430008110033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b1461011e578063b1f8100d14610143578063c5b350df14610156578063d1851c921461015e578063d232c2201461016f578063ec2b13451461018157600080fd5b806324bdff8c146100ae5780633cf52ffb146100c35780636a42b8f8146100da578063715018a6146100e357806384785ecd146100eb575b600080fd5b6100c16100bc36600461056d565b610194565b005b6002545b6040519081526020015b60405180910390f35b62093a806100c7565b6100c161027a565b61010e6100f936600461056d565b60036020526000908152604090205460ff1681565b60405190151581526020016100d1565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100d1565b6100c161015136600461056d565b6102dc565b6100c161037d565b6001546001600160a01b031661012b565b6000546001600160a01b03161561010e565b6100c161018f36600461056d565b6103ed565b6000546001600160a01b031633146101bf576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff161561021f5760405162461bcd60e51b815260206004820152600f60248201526e30b63932b0b23c903bb0ba31b432b960891b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260036020908152604091829020805460ff1916600117905590519182527fbd71030f437353231b6e5bedade573b1e0da5cb6e8bdde37c33c1fea986c29c791015b60405180910390a150565b6000546001600160a01b031633146102a5576040516311a8a1bb60e31b815260040160405180910390fd5b60405162461bcd60e51b815260206004820152600a6024820152691c1c9bda1a589a5d195960b21b6044820152606401610216565b565b6000546001600160a01b03163314610307576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610325575060025415155b15610343576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361037157604051634a2fb73f60e11b815260040160405180910390fd5b61037a816104ba565b50565b6001546001600160a01b031633146103a8576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426103ba919061059d565b116103d8576040516324e0285f60e21b815260040160405180910390fd5b6001546102da906001600160a01b0316610508565b6000546001600160a01b03163314610418576040516311a8a1bb60e31b815260040160405180910390fd5b6001600160a01b03811660009081526003602052604090205460ff166104695760405162461bcd60e51b815260206004820152600660248201526508595e1a5cdd60d21b6044820152606401610216565b6001600160a01b038116600081815260036020908152604091829020805460ff1916905590519182527ffa8eab6357bec870e7048c2413cbaa813236bb29ebac113541a76fef429e94dc910161026f565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60006020828403121561057f57600080fd5b81356001600160a01b038116811461059657600080fd5b9392505050565b818103818111156105be57634e487b7160e01b600052601160045260246000fd5b9291505056fea26469706673582212203062aca59eb8d126511deacd14118a20eb90f63721de93f013330a1f1503a78f64736f6c63430008110033", + "devdoc": { + "kind": "dev", + "methods": { + "addWatcher(address)": { + "details": "Owner can enroll a watcher (abilities are defined by inheriting contracts)" + }, + "removeWatcher(address)": { + "details": "Owner can unenroll a watcher (abilities are defined by inheriting contracts)" + }, + "renounceOwnership()": { + "details": "Renounce ownership should be impossible as long as the watcher griefing vector exists. You can still propose `address(0)`, but it will never be accepted." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "acceptProposedOwner()": { + "notice": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "delay()": { + "notice": "Returns the delay period before a new owner can be accepted." + }, + "owner()": { + "notice": "Returns the address of the current owner." + }, + "proposeNewOwner(address)": { + "notice": "Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process" + }, + "proposed()": { + "notice": "Returns the address of the proposed owner." + }, + "proposedTimestamp()": { + "notice": "Returns the address of the proposed owner." + }, + "renounceOwnership()": { + "notice": "Remove ability to renounce ownership" + }, + "renounced()": { + "notice": "Indicates if the ownership has been renounced() by checking if current owner is address(0)" + } + }, + "notice": "This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can inherit to make use of the same watcher set.", + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 29053, + "contract": "contracts/messaging/WatcherManager.sol:WatcherManager", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 29055, + "contract": "contracts/messaging/WatcherManager.sol:WatcherManager", + "label": "_proposed", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 29057, + "contract": "contracts/messaging/WatcherManager.sol:WatcherManager", + "label": "_proposedOwnershipTimestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 17113, + "contract": "contracts/messaging/WatcherManager.sol:WatcherManager", + "label": "isWatcher", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/_DefaultDiamondERC165Init.json b/packages/deployments/contracts/deployments/fraxtal/_DefaultDiamondERC165Init.json new file mode 100644 index 0000000000..d1f932542f --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/_DefaultDiamondERC165Init.json @@ -0,0 +1,70 @@ +{ + "address": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "interfaceIds", + "type": "bytes4[]" + }, + { + "internalType": "bytes4[]", + "name": "interfaceIdsToRemove", + "type": "bytes4[]" + } + ], + "name": "setERC165", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x596c8585ba25f75df76d94148470d297d4c27b1d9c76112da2fdd2a207344cde", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "279558", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x10d37ecb1dd2813cf19acfbd98cdb5de6f1c6c7f66b1efc53f4747fafefca543", + "transactionHash": "0x596c8585ba25f75df76d94148470d297d4c27b1d9c76112da2fdd2a207344cde", + "logs": [], + "blockNumber": 2894863, + "cumulativeGasUsed": "330120", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"interfaceIds\",\"type\":\"bytes4[]\"},{\"internalType\":\"bytes4[]\",\"name\":\"interfaceIdsToRemove\",\"type\":\"bytes4[]\"}],\"name\":\"setERC165\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"setERC165(bytes4[],bytes4[])\":{\"params\":{\"interfaceIds\":\"list of interface id to set as supported\",\"interfaceIdsToRemove\":\"list of interface id to unset as supported. Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setERC165(bytes4[],bytes4[])\":{\"notice\":\"set or unset ERC165 using DiamondStorage.supportedInterfaces\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/initializers/DiamondERC165Init.sol\":\"DiamondERC165Init\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/initializers/DiamondERC165Init.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {IERC165} from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondERC165Init {\\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\\n /// @param interfaceIds list of interface id to set as supported\\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n\\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\\n\\n for (uint256 i = 0; i < interfaceIds.length; i++) {\\n ds.supportedInterfaces[interfaceIds[i]] = true;\\n }\\n\\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x71a7a882fb6ee26dbfd70ec75d230f6336d2dd05db7e480168aadb53f216ae4b\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x7541f7408d0f74162bc4664d5e012427f2ceaab2abadca0353269ef15ee03d8b\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061041e806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80632a84809114610030575b600080fd5b61004361003e3660046102a4565b610045565b005b7f01ffc9a70000000000000000000000000000000000000000000000000000000060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f699d9daa71b280d05a152715774afa0a81a312594b2d731d6b0b2552b7d6f69f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905b848110156101a457600182600301600088888581811061011e5761011e610310565b9050602002016020810190610133919061033f565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061019c81610388565b9150506100fc565b5060005b828110156102505760008260030160008686858181106101ca576101ca610310565b90506020020160208101906101df919061033f565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061024881610388565b9150506101a8565b505050505050565b60008083601f84011261026a57600080fd5b50813567ffffffffffffffff81111561028257600080fd5b6020830191508360208260051b850101111561029d57600080fd5b9250929050565b600080600080604085870312156102ba57600080fd5b843567ffffffffffffffff808211156102d257600080fd5b6102de88838901610258565b909650945060208701359150808211156102f757600080fd5b5061030487828801610258565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561035157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461038157600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156103e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea264697066735822122089ec289e8a22b626b334a083bad15a54a94f6bb0677c64dd693ce4bbd20ff34664736f6c634300080a0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80632a84809114610030575b600080fd5b61004361003e3660046102a4565b610045565b005b7f01ffc9a70000000000000000000000000000000000000000000000000000000060009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f6020527f699d9daa71b280d05a152715774afa0a81a312594b2d731d6b0b2552b7d6f69f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c905b848110156101a457600182600301600088888581811061011e5761011e610310565b9050602002016020810190610133919061033f565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061019c81610388565b9150506100fc565b5060005b828110156102505760008260030160008686858181106101ca576101ca610310565b90506020020160208101906101df919061033f565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790558061024881610388565b9150506101a8565b505050505050565b60008083601f84011261026a57600080fd5b50813567ffffffffffffffff81111561028257600080fd5b6020830191508360208260051b850101111561029d57600080fd5b9250929050565b600080600080604085870312156102ba57600080fd5b843567ffffffffffffffff808211156102d257600080fd5b6102de88838901610258565b909650945060208701359150808211156102f757600080fd5b5061030487828801610258565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561035157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461038157600080fd5b9392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156103e1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea264697066735822122089ec289e8a22b626b334a083bad15a54a94f6bb0677c64dd693ce4bbd20ff34664736f6c634300080a0033", + "devdoc": { + "kind": "dev", + "methods": { + "setERC165(bytes4[],bytes4[])": { + "params": { + "interfaceIds": "list of interface id to set as supported", + "interfaceIdsToRemove": "list of interface id to unset as supported. Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "setERC165(bytes4[],bytes4[])": { + "notice": "set or unset ERC165 using DiamondStorage.supportedInterfaces" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/fraxtal/_DefaultDiamondLoupeFacet.json b/packages/deployments/contracts/deployments/fraxtal/_DefaultDiamondLoupeFacet.json new file mode 100644 index 0000000000..255edd531a --- /dev/null +++ b/packages/deployments/contracts/deployments/fraxtal/_DefaultDiamondLoupeFacet.json @@ -0,0 +1,177 @@ +{ + "address": "0x3Bcf4185443A339517aD4e580067f178d1B68E1D", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "name": "facetAddress", + "outputs": [ + { + "internalType": "address", + "name": "facetAddress_", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facetAddresses", + "outputs": [ + { + "internalType": "address[]", + "name": "facetAddresses_", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_facet", + "type": "address" + } + ], + "name": "facetFunctionSelectors", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "facetFunctionSelectors_", + "type": "bytes4[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "facets", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "facetAddress", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ], + "internalType": "struct IDiamondLoupe.Facet[]", + "name": "facets_", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xe03d8eefd14e3de93302e6c5e8e452cb8e6faa4c0f56010a949af59ee56bdf8a", + "receipt": { + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "511215", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x187b986b1aac72119f88e7ec34a54b5a76d1459f78d0d14be7465d6bd02cb606", + "transactionHash": "0xe03d8eefd14e3de93302e6c5e8e452cb8e6faa4c0f56010a949af59ee56bdf8a", + "logs": [], + "blockNumber": 2894858, + "cumulativeGasUsed": "561765", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 2, + "solcInputHash": "3fe12e823553336a8d0f950a5a792ac9", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_functionSelector\",\"type\":\"bytes4\"}],\"name\":\"facetAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"facetAddress_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facetAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"facetAddresses_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_facet\",\"type\":\"address\"}],\"name\":\"facetFunctionSelectors\",\"outputs\":[{\"internalType\":\"bytes4[]\",\"name\":\"facetFunctionSelectors_\",\"type\":\"bytes4[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"facets\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"facetAddress\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"functionSelectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct IDiamondLoupe.Facet[]\",\"name\":\"facets_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"facetAddress(bytes4)\":{\"details\":\"If facet is not found return address(0).\",\"params\":{\"_functionSelector\":\"The function selector.\"},\"returns\":{\"facetAddress_\":\"The facet address.\"}},\"facetAddresses()\":{\"returns\":{\"facetAddresses_\":\"facetAddresses_\"}},\"facetFunctionSelectors(address)\":{\"params\":{\"_facet\":\"The facet address.\"},\"returns\":{\"facetFunctionSelectors_\":\"facetFunctionSelectors_\"}},\"facets()\":{\"returns\":{\"facets_\":\"Facet\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"facetAddress(bytes4)\":{\"notice\":\"Gets the facet that supports the given selector.\"},\"facetAddresses()\":{\"notice\":\"Get all the facet addresses used by a diamond.\"},\"facetFunctionSelectors(address)\":{\"notice\":\"Gets all the function selectors provided by a facet.\"},\"facets()\":{\"notice\":\"Gets all facets and their selectors.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\":\"DiamondLoupeFacet\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/diamond/facets/DiamondLoupeFacet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\nimport { LibDiamond } from \\\"../libraries/LibDiamond.sol\\\";\\nimport { IDiamondLoupe } from \\\"../interfaces/IDiamondLoupe.sol\\\";\\nimport { IERC165 } from \\\"../interfaces/IERC165.sol\\\";\\n\\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\\n // Diamond Loupe Functions\\n ////////////////////////////////////////////////////////////////////\\n /// These functions are expected to be called frequently by tools.\\n //\\n // struct Facet {\\n // address facetAddress;\\n // bytes4[] functionSelectors;\\n // }\\n\\n /// @notice Gets all facets and their selectors.\\n /// @return facets_ Facet\\n function facets() external override view returns (Facet[] memory facets_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n uint256 numFacets = ds.facetAddresses.length;\\n facets_ = new Facet[](numFacets);\\n for (uint256 i; i < numFacets; i++) {\\n address facetAddress_ = ds.facetAddresses[i];\\n facets_[i].facetAddress = facetAddress_;\\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\\n }\\n }\\n\\n /// @notice Gets all the function selectors provided by a facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\\n }\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddresses_ = ds.facetAddresses;\\n }\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\\n }\\n\\n // This implements ERC-165.\\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\\n return ds.supportedInterfaces[_interfaceId];\\n }\\n}\\n\",\"keccak256\":\"0x40116a553fb6b8e25371199648a526d61eefee47ba24f0909b00c7301dec612e\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {Add, Replace, Remove}\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0xc00c16bfa30a3fa5f3dc684f7f8ba62c259962b25f647d9588739458989717fc\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0x10884024af2c0f7deca0fac4ddf84e76da5dba35b6e02fabeac8ea54c1a5c6f7\",\"license\":\"MIT\"},\"solc_0.8/diamond/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IERC165 {\\n /// @notice Query if a contract implements an interface\\n /// @param interfaceId The interface identifier, as specified in ERC-165\\n /// @dev Interface identification is specified in ERC-165. This function\\n /// uses less than 30,000 gas.\\n /// @return `true` if the contract implements `interfaceID` and\\n /// `interfaceID` is not 0xffffffff, `false` otherwise\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x7541f7408d0f74162bc4664d5e012427f2ceaab2abadca0353269ef15ee03d8b\",\"license\":\"MIT\"},\"solc_0.8/diamond/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport { IDiamondCut } from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n address previousOwner = ds.contractOwner;\\n ds.contractOwner = _newOwner;\\n emit OwnershipTransferred(previousOwner, _newOwner);\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: Must be contract owner\\\");\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage(); \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress); \\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length > 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n } \\n\\n\\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length > 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length > 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n uint256 contractSize;\\n assembly {\\n contractSize := extcodesize(_contract)\\n }\\n require(contractSize > 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x2205345e83eb86f5281f159a9215a096cb6d404782619f9b8e9d7a4a46c32a37\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061084e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80637a0ed627116100505780637a0ed627146100fa578063adfca15e1461010f578063cdffacc61461012f57600080fd5b806301ffc9a71461006c57806352ef6b2c146100e5575b600080fd5b6100d061007a366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100ed6101cb565b6040516100dc91906105b2565b61010261025d565b6040516100dc9190610669565b61012261011d366004610711565b610469565b6040516100dc9190610747565b6101a661013d366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100dc565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6002810180546040805160208084028201810190925282815293945083018282801561025257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610227575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff8111156102bd576102bd61075a565b60405190808252806020026020018201604052801561030357816020015b6040805180820190915260008152606060208201528152602001906001900390816102db5790505b50925060005b8181101561046357600083600201828154811061032857610328610789565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508085838151811061036857610368610789565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561042957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103d65790505b505050505085838151811061044057610440610789565b60200260200101516020018190525050808061045b906107b8565b915050610309565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092919083018282801561055c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116105095790505b5050505050915050919050565b60006020828403121561057b57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105ab57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561060057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105ce565b50909695505050505050565b600081518084526020808501945080840160005b8381101561065e5781517fffffffff000000000000000000000000000000000000000000000000000000001687529582019590820190600101610620565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610703578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff1684528701518784018790526106f08785018261060c565b9588019593505090860190600101610690565b509098975050505050505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146105ab57600080fd5b6020815260006105ab602083018461060c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610811577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220d2f6c23b0c64effd7424eb9da8e13cc0a62fab9990643ce1a7bc54f830cc768464736f6c634300080a0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100675760003560e01c80637a0ed627116100505780637a0ed627146100fa578063adfca15e1461010f578063cdffacc61461012f57600080fd5b806301ffc9a71461006c57806352ef6b2c146100e5575b600080fd5b6100d061007a366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131f602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100ed6101cb565b6040516100dc91906105b2565b61010261025d565b6040516100dc9190610669565b61012261011d366004610711565b610469565b6040516100dc9190610747565b6101a661013d366004610569565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100dc565b606060007fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6002810180546040805160208084028201810190925282815293945083018282801561025257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610227575b505050505091505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e546060907fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c908067ffffffffffffffff8111156102bd576102bd61075a565b60405190808252806020026020018201604052801561030357816020015b6040805180820190915260008152606060208201528152602001906001900390816102db5790505b50925060005b8181101561046357600083600201828154811061032857610328610789565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508085838151811061036857610368610789565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561042957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103d65790505b505050505085838151811061044057610440610789565b60200260200101516020018190525050808061045b906107b8565b915050610309565b50505090565b73ffffffffffffffffffffffffffffffffffffffff811660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d602090815260409182902080548351818402810184019094528084526060937fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c939092919083018282801561055c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116105095790505b5050505050915050919050565b60006020828403121561057b57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105ab57600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b8181101561060057835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016105ce565b50909695505050505050565b600081518084526020808501945080840160005b8381101561065e5781517fffffffff000000000000000000000000000000000000000000000000000000001687529582019590820190600101610620565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015610703578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805173ffffffffffffffffffffffffffffffffffffffff1684528701518784018790526106f08785018261060c565b9588019593505090860190600101610690565b509098975050505050505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146105ab57600080fd5b6020815260006105ab602083018461060c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610811577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea2646970667358221220d2f6c23b0c64effd7424eb9da8e13cc0a62fab9990643ce1a7bc54f830cc768464736f6c634300080a0033", + "devdoc": { + "kind": "dev", + "methods": { + "facetAddress(bytes4)": { + "details": "If facet is not found return address(0).", + "params": { + "_functionSelector": "The function selector." + }, + "returns": { + "facetAddress_": "The facet address." + } + }, + "facetAddresses()": { + "returns": { + "facetAddresses_": "facetAddresses_" + } + }, + "facetFunctionSelectors(address)": { + "params": { + "_facet": "The facet address." + }, + "returns": { + "facetFunctionSelectors_": "facetFunctionSelectors_" + } + }, + "facets()": { + "returns": { + "facets_": "Facet" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "facetAddress(bytes4)": { + "notice": "Gets the facet that supports the given selector." + }, + "facetAddresses()": { + "notice": "Get all the facet addresses used by a diamond." + }, + "facetFunctionSelectors(address)": { + "notice": "Gets all the function selectors provided by a facet." + }, + "facets()": { + "notice": "Gets all facets and their selectors." + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/mainnet/FraxtalHubConnectorStaging.json b/packages/deployments/contracts/deployments/mainnet/FraxtalHubConnectorStaging.json new file mode 100644 index 0000000000..6158e8dc91 --- /dev/null +++ b/packages/deployments/contracts/deployments/mainnet/FraxtalHubConnectorStaging.json @@ -0,0 +1,704 @@ +{ + "address": "0x44fB86a509B33d65BADA9985B9ce8F52fda621e5", + "abi": [ + { + "inputs": [ + { + "internalType": "uint32", + "name": "_domain", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_mirrorDomain", + "type": "uint32" + }, + { + "internalType": "address", + "name": "_amb", + "type": "address" + }, + { + "internalType": "address", + "name": "_rootManager", + "type": "address" + }, + { + "internalType": "address", + "name": "_mirrorConnector", + "type": "address" + }, + { + "internalType": "address", + "name": "_optimismPortal", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_gasCap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "Connector__processMessage_notUsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyOwner_notOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__onlyProposed_notProposedOwner", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_invalidProposal", + "type": "error" + }, + { + "inputs": [], + "name": "ProposedOwnable__renounceOwnership_noProposal", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "FundsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_previous", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_updated", + "type": "uint256" + } + ], + "name": "GasCapUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageProcessed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "encodedData", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "MessageSent", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previous", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "current", + "type": "address" + } + ], + "name": "MirrorConnectorUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint32", + "name": "domain", + "type": "uint32" + }, + { + "indexed": true, + "internalType": "uint32", + "name": "mirrorDomain", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "address", + "name": "amb", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "rootManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "mirrorConnector", + "type": "address" + } + ], + "name": "NewConnector", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "proposedOwner", + "type": "address" + } + ], + "name": "OwnershipProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "AMB", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIRROR_DOMAIN", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OPTIMISM_PORTAL", + "outputs": [ + { + "internalType": "contract IOptimismPortal", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROOT_MANAGER", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptProposedOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasCap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mirrorConnector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "processMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct Types.WithdrawalTransaction", + "name": "_tx", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_l2OutputIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "version", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "messagePasserStorageRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "latestBlockhash", + "type": "bytes32" + } + ], + "internalType": "struct Types.OutputRootProof", + "name": "_outputRootProof", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "_withdrawalProof", + "type": "bytes[]" + } + ], + "name": "processMessageFromRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "processed", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newlyProposed", + "type": "address" + } + ], + "name": "proposeNewOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "proposed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposedTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounced", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_encodedData", + "type": "bytes" + } + ], + "name": "sendMessage", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasCap", + "type": "uint256" + } + ], + "name": "setGasCap", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_mirrorConnector", + "type": "address" + } + ], + "name": "setMirrorConnector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_expected", + "type": "address" + } + ], + "name": "verifySender", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "withdrawFunds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x15dd8470def9716507d22ef4d988c22400d6f25a41c8b5e70c5974a1250f58b7", + "receipt": { + "to": null, + "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", + "contractAddress": "0x44fB86a509B33d65BADA9985B9ce8F52fda621e5", + "transactionIndex": 124, + "gasUsed": "1464703", + "logsBloom": "0x00800000000000000000000008000000000000000000401000800000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000040008000000000020000000000000000000800000000000010000000000000000000400000000000000000000000800000000000000000000040000000000000000000000000000000080000008000000000000000000000000000000000000000000000200000000000000000000000010000000000000000000000000000001020000000000000200000000000040000000000000000000002000000000000000000", + "blockHash": "0x0a213a6a1365416d5e2ece649a1f2933654e8d7c508d59653e3ef69ebd81f1eb", + "transactionHash": "0x15dd8470def9716507d22ef4d988c22400d6f25a41c8b5e70c5974a1250f58b7", + "logs": [ + { + "transactionIndex": 124, + "blockNumber": 19569917, + "transactionHash": "0x15dd8470def9716507d22ef4d988c22400d6f25a41c8b5e70c5974a1250f58b7", + "address": "0x44fB86a509B33d65BADA9985B9ce8F52fda621e5", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" + ], + "data": "0x", + "logIndex": 238, + "blockHash": "0x0a213a6a1365416d5e2ece649a1f2933654e8d7c508d59653e3ef69ebd81f1eb" + }, + { + "transactionIndex": 124, + "blockNumber": 19569917, + "transactionHash": "0x15dd8470def9716507d22ef4d988c22400d6f25a41c8b5e70c5974a1250f58b7", + "address": "0x44fB86a509B33d65BADA9985B9ce8F52fda621e5", + "topics": [ + "0x4f9c27c2fe3f84576ea469d367d044da53c45e951617e8389f2b5ed8db9d25f0", + "0x0000000000000000000000000000000000000000000000000000000000657468", + "0x0000000000000000000000000000000000000000000000000000000066726178" + ], + "data": "0x000000000000000000000000126bcc31bc076b3d515f60fbc81fdde0b0d542ed0000000000000000000000000031d290b8526e2eb6ac22111e5ff96eca7602580000000000000000000000000000000000000000000000000000000000000000", + "logIndex": 239, + "blockHash": "0x0a213a6a1365416d5e2ece649a1f2933654e8d7c508d59653e3ef69ebd81f1eb" + }, + { + "transactionIndex": 124, + "blockNumber": 19569917, + "transactionHash": "0x15dd8470def9716507d22ef4d988c22400d6f25a41c8b5e70c5974a1250f58b7", + "address": "0x44fB86a509B33d65BADA9985B9ce8F52fda621e5", + "topics": [ + "0x877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf850", + "logIndex": 240, + "blockHash": "0x0a213a6a1365416d5e2ece649a1f2933654e8d7c508d59653e3ef69ebd81f1eb" + } + ], + "blockNumber": 19569917, + "confirmations": 30, + "cumulativeGasUsed": "11016063", + "effectiveGasPrice": "71497800158", + "status": 1, + "type": 2, + "byzantium": true + }, + "args": [ + "6648936", + "1718772088", + "0x126bcc31Bc076B3d515f60FBC81FddE0B0d542Ed", + "0x0031d290B8526e2Eb6ac22111E5fF96EcA760258", + "0x0000000000000000000000000000000000000000", + "0x36cb65c1967A0Fb0EEE11569C51C2f2aA1Ca6f6D", + "850000" + ], + "numDeployments": 1, + "deployedBytecode": "0x6080604052600436106101445760003560e01c8063715018a6116100b6578063c5b350df1161006f578063c5b350df146103e9578063cc394283146103fe578063d1851c921461041e578063d232c2201461043c578063d69f9d611461045b578063db1b76591461048f57600080fd5b8063715018a6146103025780637850b0201461031757806385734ee1146103375780638da5cb5b1461036b578063b1f8100d14610389578063c1f0808a146103a957600080fd5b806352a9674b1161010857806352a9674b1461020c5780635bd11efc146102405780635f61e3ec1461026057806368742da6146102ac5780636a42b8f8146102cc5780637049138f146102e257600080fd5b8063047dbeb81461015057806314168416146101795780633cf52ffb146101c257806348e6fa23146101d75780634ff746f6146101ec57600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061016660045481565b6040519081526020015b60405180910390f35b34801561018557600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000006672617881565b60405163ffffffff9091168152602001610170565b3480156101ce57600080fd5b50600254610166565b6101ea6101e5366004611232565b6104af565b005b3480156101f857600080fd5b506101ea610207366004611296565b610564565b34801561021857600080fd5b506101ad7f000000000000000000000000000000000000000000000000000000000065746881565b34801561024c57600080fd5b506101ea61025b3660046112e8565b61060a565b34801561026c57600080fd5b506102947f0000000000000000000000000031d290b8526e2eb6ac22111e5ff96eca76025881565b6040516001600160a01b039091168152602001610170565b3480156102b857600080fd5b506101ea6102c73660046112e8565b610641565b3480156102d857600080fd5b5062093a80610166565b3480156102ee57600080fd5b506101ea6102fd366004611370565b6106be565b34801561030e57600080fd5b506101ea61098d565b34801561032357600080fd5b506101ea61033236600461146a565b610a41565b34801561034357600080fd5b506102947f00000000000000000000000036cb65c1967a0fb0eee11569c51c2f2aa1ca6f6d81565b34801561037757600080fd5b506000546001600160a01b0316610294565b34801561039557600080fd5b506101ea6103a43660046112e8565b610a75565b3480156103b557600080fd5b506103d96103c436600461146a565b60056020526000908152604090205460ff1681565b6040519015158152602001610170565b3480156103f557600080fd5b506101ea610b13565b34801561040a57600080fd5b50600354610294906001600160a01b031681565b34801561042a57600080fd5b506001546001600160a01b0316610294565b34801561044857600080fd5b506000546001600160a01b0316156103d9565b34801561046757600080fd5b506102947f000000000000000000000000126bcc31bc076b3d515f60fbc81fdde0b0d542ed81565b34801561049b57600080fd5b506103d96104aa3660046112e8565b610b83565b336001600160a01b037f0000000000000000000000000031d290b8526e2eb6ac22111e5ff96eca760258161461051b5760405162461bcd60e51b815260206004820152600c60248201526b10b937b7ba26b0b730b3b2b960a11b60448201526064015b60405180910390fd5b6105258282610b94565b7fdcaa37a042a0087de79018c629bbd29cee82ca80bd9be394e1696bf9e9355077828233604051610558939291906114d3565b60405180910390a15050565b336001600160a01b037f000000000000000000000000126bcc31bc076b3d515f60fbc81fdde0b0d542ed16146105c55760405162461bcd60e51b81526004016105129060208082526004908201526310a0a6a160e11b604082015260600190565b6105ce81610cab565b7fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced81336040516105ff929190611511565b60405180910390a150565b6000546001600160a01b03163314610635576040516311a8a1bb60e31b815260040160405180910390fd5b61063e81610cc4565b50565b6000546001600160a01b0316331461066c576040516311a8a1bb60e31b815260040160405180910390fd5b476106778282610d2d565b816001600160a01b03167feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d826040516106b291815260200190565b60405180910390a25050565b604051634870496f60e01b81526001600160a01b037f00000000000000000000000036cb65c1967a0fb0eee11569c51c2f2aa1ca6f6d1690634870496f9061071290889088908890889088906004016115f6565b600060405180830381600087803b15801561072c57600080fd5b505af1158015610740573d6000803e3d6000fd5b5050505060008060006107568860a00151610e4b565b60035494985092965091945050506001600160a01b0380861691161490506107b45760405162461bcd60e51b815260206004820152601160248201527010b6b4b93937b91031b7b73732b1ba37b960791b6044820152606401610512565b6001600160a01b03821630146107f65760405162461bcd60e51b8152602060048201526007602482015266085d185c99d95d60ca1b6044820152606401610512565b80516020146108315760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610512565b600061083c826116ac565b60008181526005602052604090205490915060ff161561088a5760405162461bcd60e51b81526020600482015260096024820152681c1c9bd8d95cdcd95960ba1b6044820152606401610512565b60008181526005602052604090819020805460ff191660011790555163473ec9fd60e11b81527f000000000000000000000000000000000000000000000000000000006672617863ffffffff166004820152602481018290526001600160a01b037f0000000000000000000000000031d290b8526e2eb6ac22111e5ff96eca7602581690638e7d93fa90604401600060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050507fb3abc57bfeebd2cac918901db582f71972a8e628bccf19f5ae3e3482b98a5ced823360405161097a929190611511565b60405180910390a1505050505050505050565b6000546001600160a01b031633146109b8576040516311a8a1bb60e31b815260040160405180910390fd5b62093a80600254426109ca91906116d0565b116109e8576040516324e0285f60e21b815260040160405180910390fd5b600254600003610a0b57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b031615610a35576040516323295ef960e01b815260040160405180910390fd5b610a3f6000610f68565b565b6000546001600160a01b03163314610a6c576040516311a8a1bb60e31b815260040160405180910390fd5b61063e81610fcd565b6000546001600160a01b03163314610aa0576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015610abe575060025415155b15610adc576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b03808316911603610b0a57604051634a2fb73f60e11b815260040160405180910390fd5b61063e8161100e565b6001546001600160a01b03163314610b3e576040516311a7f27160e11b815260040160405180910390fd5b62093a8060025442610b5091906116d0565b11610b6e576040516324e0285f60e21b815260040160405180910390fd5b600154610a3f906001600160a01b0316610f68565b6000610b8e8261105c565b92915050565b8151602014610bcf5760405162461bcd60e51b8152602060048201526007602482015266042d8cadccee8d60cb1b6044820152606401610512565b6000634ff746f660e01b83604051602401610bea91906116f1565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600354600480549351633dbb202b60e01b81529294506001600160a01b037f000000000000000000000000126bcc31bc076b3d515f60fbc81fdde0b0d542ed811694633dbb202b94610c749490921692879201611704565b600060405180830381600087803b158015610c8e57600080fd5b505af1158015610ca2573d6000803e3d6000fd5b50505050505050565b6040516316c2fdb560e21b815260040160405180910390fd5b600354604080516001600160a01b03928316815291831660208301527fc77bec288fc88f168427f2f7da682eadb26cac89d8d591af6e443da98dff2bbc910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b80471015610d7d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610512565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610dca576040519150601f19603f3d011682016040523d82523d6000602084013e610dcf565b606091505b5050905080610e465760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610512565b505050565b602081015160009081908190819081906060906001600160e01b0319811663d764ad0b60e01b14610eaa5760405162461bcd60e51b815260206004820152600960248201526810b9b2b632b1ba37b960b91b6044820152606401610512565b8751600490600090610ebd9083906116d0565b905060008167ffffffffffffffff811115610eda57610eda611144565b6040519080825280601f01601f191660200182016040528015610f04576020820181803683370190505b509050826020018b016020820160005b84811015610f2c578281015182820152602001610f14565b50505080806020019051810190610f43919061173e565b809a50819b50829c50839d50849e50859f505050505050505050505091939550919395565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b60045460408051918252602082018390527f877a02cb809da0364d23adca3cd50c451b53f279d3df632e1fc11eb66335bce5910160405180910390a1600455565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b6000610b8e7f000000000000000000000000126bcc31bc076b3d515f60fbc81fdde0b0d542ed836000336001600160a01b038416146110c75760405162461bcd60e51b81526020600482015260076024820152662162726964676560c81b6044820152606401610512565b816001600160a01b0316836001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113391906117fb565b6001600160a01b0316149392505050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561117d5761117d611144565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156111ac576111ac611144565b604052919050565b600067ffffffffffffffff8211156111ce576111ce611144565b50601f01601f191660200190565b600082601f8301126111ed57600080fd5b81356112006111fb826111b4565b611183565b81815284602083860101111561121557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561124557600080fd5b823567ffffffffffffffff8082111561125d57600080fd5b611269868387016111dc565b9350602085013591508082111561127f57600080fd5b5061128c858286016111dc565b9150509250929050565b6000602082840312156112a857600080fd5b813567ffffffffffffffff8111156112bf57600080fd5b6112cb848285016111dc565b949350505050565b6001600160a01b038116811461063e57600080fd5b6000602082840312156112fa57600080fd5b8135611305816112d3565b9392505050565b60006080828403121561131e57600080fd5b50919050565b60008083601f84011261133657600080fd5b50813567ffffffffffffffff81111561134e57600080fd5b6020830191508360208260051b850101111561136957600080fd5b9250929050565b600080600080600060e0868803121561138857600080fd5b853567ffffffffffffffff808211156113a057600080fd5b9087019060c0828a0312156113b457600080fd5b6113bc61115a565b8235815260208301356113ce816112d3565b602082015260408301356113e1816112d3565b80604083015250606083013560608201526080830135608082015260a08301358281111561140e57600080fd5b61141a8b8286016111dc565b60a0830152509650602088013595506114368960408a0161130c565b945060c088013591508082111561144c57600080fd5b5061145988828901611324565b969995985093965092949392505050565b60006020828403121561147c57600080fd5b5035919050565b60005b8381101561149e578181015183820152602001611486565b50506000910152565b600081518084526114bf816020860160208601611483565b601f01601f19169290920160200192915050565b6060815260006114e660608301866114a7565b82810360208401526114f881866114a7565b91505060018060a01b0383166040830152949350505050565b60408152600061152460408301856114a7565b905060018060a01b03831660208301529392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b81835260006020808501808196508560051b810191508460005b878110156115e95782840389528135601e1988360301811261159f57600080fd5b8701858101903567ffffffffffffffff8111156115bb57600080fd5b8036038213156115ca57600080fd5b6115d586828461153b565b9a87019a955050509084019060010161157e565b5091979650505050505050565b60e080825286519082015260208601516001600160a01b039081166101008301526040870151166101208201526060860151610140820152608086015161016082015260a086015160c06101808301526000906116576101a08401826114a7565b905086602084015261168d6040840187803582526020810135602083015260408101356040830152606081013560608301525050565b82810360c08401526116a0818587611564565b98975050505050505050565b8051602080830151919081101561131e5760001960209190910360031b1b16919050565b81810381811115610b8e57634e487b7160e01b600052601160045260246000fd5b60208152600061130560208301846114a7565b6001600160a01b0384168152606060208201819052600090611728908301856114a7565b905063ffffffff83166040830152949350505050565b60008060008060008060c0878903121561175757600080fd5b865195506020870151611769816112d3565b604088015190955061177a816112d3565b80945050606087015192506080870151915060a087015167ffffffffffffffff8111156117a657600080fd5b8701601f810189136117b757600080fd5b80516117c56111fb826111b4565b8181528a60208385010111156117da57600080fd5b6117eb826020830160208601611483565b8093505050509295509295509295565b60006020828403121561180d57600080fd5b8151611305816112d356fea26469706673582212208e217d671dc72d25ecadbb77036d51b17a6c09ac2a00f99e68a058736c56021164736f6c63430008110033" +} \ No newline at end of file diff --git a/packages/deployments/contracts/deployments/mainnet/RelayerProxyHubStaging.json b/packages/deployments/contracts/deployments/mainnet/RelayerProxyHubStaging.json index e65046ab57..dcc6414fd5 100644 --- a/packages/deployments/contracts/deployments/mainnet/RelayerProxyHubStaging.json +++ b/packages/deployments/contracts/deployments/mainnet/RelayerProxyHubStaging.json @@ -1,5 +1,5 @@ { - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "abi": [ { "inputs": [ @@ -1625,334 +1625,370 @@ "type": "receive" } ], - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", "receipt": { "to": null, "from": "0xade09131C6f43fe22C2CbABb759636C43cFc181e", - "contractAddress": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", - "transactionIndex": 7, - "gasUsed": "5027253", - "logsBloom": "0x00000000000000006000000000000000000008000010400000800000000000000000000000000000000080000000000004000000001000200000100040000000000008080040000000000010000001000001000082000000000000000000000000000000020000000000000000000800000800000000100400000000090000400000000000000000000040000200000000000000000000000000000000000000100000000000080000000000000000002108002000000000000000000000000000000000000200000000200008000000000000000000900000000000001020000000000000000000012000000000000000000040000000000000000000008400", - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c", - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", + "contractAddress": "0x2D20B01E5979309b50cF461689333CA14e6E876D", + "transactionIndex": 121, + "gasUsed": "5102697", + "logsBloom": "0x00000000000000006000000000000000000008000010400000800000040000000000000000000000000000000000000004000000001000200000100040000000000008080040000000000010000000000001000080000000000000000000000000000000020000000000000000000800000800000000100400000000090000400000000000000000000040002200000000000000000000000000000000000000100000000000080000000000000000002108002000000000000000000000000000000000000200000000200008000000000000080000900000000000001020000000000000000000012000000000000000000040000000000000000000008400", + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906", + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", "logs": [ { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000ade09131c6f43fe22c2cbabb759636c43cfc181e" ], "data": "0x", - "logIndex": 56, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 197, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2" ], "data": "0x0000000000000000000000005e1ba88978b1f9b61448c5e6881e21a7d771d1390000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 57, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 198, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd" ], "data": "0x0000000000000000000000001db5ee7b6235e6c31efb4b3ee45190ca14e1a2140000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 58, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 199, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 59, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 200, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 60, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 201, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x711d2a81db157c0acede64f080708460163dfaddcd4266c2c609efb458d3e4c0" ], "data": "0x000000000000000000000000eb02addcfd8b773a5ffa6b9d1fe99c566f8c44cc0000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 61, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 202, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x289d6927dc5ba66abb928c5be9d3aecd2baf7c8e89f1faec6a791b8b21589a5d" ], "data": "0x00000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 62, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 203, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x2a1ca87adff1a64c5b6edc218dfd6b80208260b240fbc939ea43e07c2764f5ca" ], "data": "0x00000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 63, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 204, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c5" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 64, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 205, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487" ], "data": "0x0000000000000000000000000031d290b8526e2eb6ac22111e5ff96eca7602580000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 65, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 206, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x5d93bbdda0d794fed18c39a7b776dc86cbf6ed443032e6baac71373996b85010" ], "data": "0x00000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 66, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 207, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x289d6927dc5ba66abb928c5be9d3aecd2baf7c8e89f1faec6a791b8b21589a5d" ], "data": "0x00000000000000000000000000000000000000000000000000000000000007080000000000000000000000000000000000000000000000000000000000000708", - "logIndex": 67, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 208, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0x17da78d98886c3b8819430ab0693a44c32dfa6426a4db4601ce45bc4bc2385ec" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logIndex": 68, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 209, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x0000000000000000000000001db5ee7b6235e6c31efb4b3ee45190ca14e1a21400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 69, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 210, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x0000000000000000000000004d9f990e96d7b9180c7cafe003456add60aa98600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a", - "logIndex": 70, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 211, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x0000000000000000000000001b891d279a763426394c9e2100205005c0dcaf4300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038", - "logIndex": 71, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 212, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x000000000000000000000000a98f36ca759271928d18ae9b8bc6e214c279fded00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064", - "logIndex": 72, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 213, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x00000000000000000000000062c3f15eee9a932b90c64b07c02ee9962b8dbb5a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089", - "logIndex": 73, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 214, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", + "topics": [ + "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" + ], + "data": "0x0000000000000000000000004d9f990e96d7b9180c7cafe003456add60aa9860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc", + "logIndex": 215, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" + }, + { + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x00000000000000000000000018a7a4e4c70fcec6eb4844eb84bc98523f58b89800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144", - "logIndex": 74, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 216, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], - "data": "0x000000000000000000000000af60b2a87f791aa9de81c32f964403da614a3bc500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440", - "logIndex": 75, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "data": "0x0000000000000000000000005fa89ea322708b30882d3aa3a9fc3da4775274c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000440", + "logIndex": 217, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x000000000000000000000000d2a6cdd411d8d7357a0e87b8fdba6ae53b4a231d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044d", - "logIndex": 76, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 218, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], - "data": "0x000000000000000000000000908692ac56727a3c0c62869cadbcde53e06136f900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001388", - "logIndex": 77, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "data": "0x0000000000000000000000005b447756e2e55ceb8d0e46217ea666cf3e037cdd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001388", + "logIndex": 219, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x000000000000000000000000af00e0b7b5ce2d3a0b5d02dec936254550228b6100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002105", - "logIndex": 78, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 220, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" + }, + { + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", + "topics": [ + "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" + ], + "data": "0x000000000000000000000000842ad61a06f8f6bc125e8059bcd4d6d3440eca340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000868b", + "logIndex": 221, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x0000000000000000000000007d8d16c500b89e4a1fde991f284d84d57e949ae30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4b1", - "logIndex": 79, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 222, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x000000000000000000000000d5ae7b90dba594899977072e363bbf164e7b1d150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a86a", - "logIndex": 80, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 223, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" }, { - "transactionIndex": 7, - "blockNumber": 19035338, - "transactionHash": "0x677b664cb1f74d4d8e08a135b1dc51ea9b57d17c04868f2bdff047a3535d26d4", - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", "topics": [ "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" ], "data": "0x00000000000000000000000089285703326a9b3192841f67121dd714e49686890000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e708", - "logIndex": 81, - "blockHash": "0x273d016aa22f0b488159fc4bf0a93c1830551c79570011efad0ee0792248223c" + "logIndex": 224, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" + }, + { + "transactionIndex": 121, + "blockNumber": 19566620, + "transactionHash": "0x39d069eaffae36c10df1e77943b8cd89499485cbef517a7db260d473b4e6560d", + "address": "0x2D20B01E5979309b50cF461689333CA14e6E876D", + "topics": [ + "0xf3f83f3e1df056d9be522e74b3fe84add98c686289a646ae5570827743424092" + ], + "data": "0x0000000000000000000000003b1edf344f03489b86de923f288514de80aa929a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082750", + "logIndex": 225, + "blockHash": "0x169334d76b0c529362df27b1217f88875aca770d3491a2bf6f8916285afdd906" } ], - "blockNumber": 19035338, - "cumulativeGasUsed": "6239639", + "blockNumber": 19566620, + "cumulativeGasUsed": "15591946", "status": 1, "byzantium": true }, @@ -1974,14 +2010,17 @@ "0x1b891D279a763426394c9E2100205005C0DCAf43", "0xa98f36ca759271928d18AE9b8BC6e214C279fDeD", "0x62C3f15Eee9A932B90c64B07c02EE9962b8DbB5A", + "0x4d9F990E96d7B9180c7cAFe003456AdD60aA9860", "0x18a7a4e4C70fcec6Eb4844eb84bc98523F58b898", - "0xAf60b2A87F791AA9De81c32f964403DA614a3Bc5", + "0x5FA89ea322708b30882D3aa3a9fC3DA4775274c0", "0xD2a6cDd411d8d7357a0E87b8fDBa6ae53B4A231d", - "0x908692AC56727A3C0C62869CAdbCDe53e06136f9", + "0x5b447756e2E55CEB8d0e46217ea666CF3e037cdd", "0xAf00e0b7B5cE2D3a0B5d02DEc936254550228b61", + "0x842aD61A06f8f6bC125E8059bcD4D6D3440ECA34", "0x7D8d16c500b89E4A1fdE991F284d84d57E949aE3", "0xd5aE7b90Dba594899977072e363bBf164E7B1D15", - "0x89285703326a9b3192841f67121DD714E4968689" + "0x89285703326a9b3192841f67121DD714E4968689", + "0x3B1edF344F03489b86DE923f288514De80aa929A" ], "hubConnectorChains": [ 1, @@ -1989,19 +2028,22 @@ 56, 100, 137, + 252, 324, 1088, 1101, 5000, 8453, + 34443, 42161, 43114, - 59144 + 59144, + 534352 ] } ], - "numDeployments": 1, - "solcInputHash": "6ba9340b79f8dcc31c12e4fcb8cd7f90", + "numDeployments": 2, + "solcInputHash": "dd554adc81396e5175040a2eb9916e3d", "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"connext\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spokeConnector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"gelatoRelayer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeCollector\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"keep3r\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"autonolas\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"propagateCooldown\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeCooldown\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"proposeAggregateRootCooldown\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"hubConnectors\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"hubConnectorChains\",\"type\":\"uint32[]\"}],\"internalType\":\"struct RelayerProxyHub.HubConstructorParams\",\"name\":\"_params\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyOwner_notOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__onlyProposed_notProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__ownershipDelayElapsed_delayNotElapsed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__proposeNewOwner_noOwnershipChange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_invalidProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProposedOwnable__renounceOwnership_noProposal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxyHub__processFromRoot_alreadyProcessed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxyHub__processFromRoot_noHubConnector\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxyHub__processFromRoot_unsupportedChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxyHub__propagateCooledDown_notCooledDown\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"RelayerProxyHub__validateProposeSignature_notProposer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxy__addRelayer_relayerAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxy__definedAddress_empty\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxy__finalizeCooledDown_notCooledDown\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxy__isWorkableBySender_notWorkable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxy__onlyRelayer_notRelayer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxy__proposeAggregateRootCooledDown_notCooledDown\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxy__removeRelayer_relayerNotAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RelayerProxy__validateAndPayWithCredits_notKeep3r\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"RelayerProxy__validateProposeSignature_notProposer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"AutonolasChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"enum RelayerProxyHub.AutonolasPriorityFunction\",\"name\":\"fn\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"updated\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"previous\",\"type\":\"uint8\"}],\"name\":\"AutonolasPriorityChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"ConnextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"FeeCollectorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"finalizeCooldown\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldFinalizeCooldown\",\"type\":\"uint256\"}],\"name\":\"FinalizeCooldownChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"FundsDeducted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"FundsReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"GelatoRelayerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"hubConnector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldHubConnector\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"chain\",\"type\":\"uint32\"}],\"name\":\"HubConnectorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"Keep3rChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"OwnershipProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"propagateCooldown\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPropagateCooldown\",\"type\":\"uint256\"}],\"name\":\"PropagateCooldownChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"proposeAggregateRootCooldown\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldProposeAggregateRootCooldown\",\"type\":\"uint256\"}],\"name\":\"ProposeAggregateRootCooldownChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"name\":\"RelayerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"}],\"name\":\"RelayerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rootManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRootManager\",\"type\":\"address\"}],\"name\":\"RootManagerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"updated\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previous\",\"type\":\"address\"}],\"name\":\"SpokeConnectorChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptProposedOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"addRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedRelayer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"autonolas\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum RelayerProxyHub.AutonolasPriorityFunction\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"autonolasPriority\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connext\",\"outputs\":[{\"internalType\":\"contract IConnext\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"delay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"originDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"canonicalDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"receiveLocal\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"slippage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bridgedAmt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"normalizedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"canonicalId\",\"type\":\"bytes32\"}],\"internalType\":\"struct TransferInfo\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"routers\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"routerSignatures\",\"type\":\"bytes[]\"},{\"internalType\":\"address\",\"name\":\"sequencer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSignature\",\"type\":\"bytes\"}],\"internalType\":\"struct ExecuteArgs\",\"name\":\"_args\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"transferId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeCollector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposedAggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_rootTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_endOfDispute\",\"type\":\"uint256\"}],\"name\":\"finalize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_fees\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_encodedData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"_proposedAggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_endOfDispute\",\"type\":\"uint256\"}],\"name\":\"finalizeAndPropagate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_fees\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_encodedData\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes32\",\"name\":\"_proposedAggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_endOfDispute\",\"type\":\"uint256\"}],\"name\":\"finalizeAndPropagateKeep3r\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizeCooldown\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proposedAggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_endOfDispute\",\"type\":\"uint256\"}],\"name\":\"finalizeOnRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gelatoRelayer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"hubConnectors\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"keep3r\",\"outputs\":[{\"internalType\":\"contract IKeep3rV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizeAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPropagateAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastProposeAggregateRootAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_fromChain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_l2Hash\",\"type\":\"bytes32\"}],\"name\":\"processFromRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_fromChain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_l2Hash\",\"type\":\"bytes32\"}],\"name\":\"processFromRootKeep3r\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"processedRootMessages\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_messageFees\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_encodedData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"_relayerFee\",\"type\":\"uint256\"}],\"name\":\"propagate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"propagateCooldown\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_connectors\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_messageFees\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_encodedData\",\"type\":\"bytes[]\"}],\"name\":\"propagateKeep3r\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"domains\",\"type\":\"uint32[]\"}],\"name\":\"propagateWorkable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_rootTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"proposeAggregateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposeAggregateRootCooldown\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_snapshotId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"_snapshotsRoots\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"_domains\",\"type\":\"uint32[]\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"proposeAggregateRootOnRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_snapshotId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"_snapshotsRoots\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint32[]\",\"name\":\"_domains\",\"type\":\"uint32[]\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"proposeAggregateRootOnRootKeep3r\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newlyProposed\",\"type\":\"address\"}],\"name\":\"proposeNewOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposedTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[32]\",\"name\":\"path\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"internalType\":\"struct ISpokeConnector.Proof[]\",\"name\":\"_proofs\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"_aggregateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[32]\",\"name\":\"_aggregatePath\",\"type\":\"bytes32[32]\"},{\"internalType\":\"uint256\",\"name\":\"_aggregateIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"proveAndProcess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_relayer\",\"type\":\"address\"}],\"name\":\"removeRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounced\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootManager\",\"outputs\":[{\"internalType\":\"contract IRootManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_encodedData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_messageFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_relayerFee\",\"type\":\"uint256\"}],\"name\":\"send\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sendRootToHubSpoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_autonolas\",\"type\":\"address\"}],\"name\":\"setAutonolas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum RelayerProxyHub.AutonolasPriorityFunction\",\"name\":\"_function\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"_autonolasPriority\",\"type\":\"uint8\"}],\"name\":\"setAutonolasPriority\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connext\",\"type\":\"address\"}],\"name\":\"setConnext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeCollector\",\"type\":\"address\"}],\"name\":\"setFeeCollector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_finalizeCooldown\",\"type\":\"uint256\"}],\"name\":\"setFinalizeCooldown\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gelatoRelayer\",\"type\":\"address\"}],\"name\":\"setGelatoRelayer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_hubConnector\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_chain\",\"type\":\"uint32\"}],\"name\":\"setHubConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_keep3r\",\"type\":\"address\"}],\"name\":\"setKeep3r\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_propagateCooldown\",\"type\":\"uint256\"}],\"name\":\"setPropagateCooldown\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_proposeCooldown\",\"type\":\"uint256\"}],\"name\":\"setProposeAggregateRootCooldown\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rootManager\",\"type\":\"address\"}],\"name\":\"setRootManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spokeConnector\",\"type\":\"address\"}],\"name\":\"setSpokeConnector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"spokeConnector\",\"outputs\":[{\"internalType\":\"contract ISpokeConnector\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Connext Labs, Inc.\",\"events\":{\"AutonolasChanged(address,address)\":{\"params\":{\"previous\":\"Old Autonolas address in the contract\",\"updated\":\"New Autonolas address in the contract\"}},\"AutonolasPriorityChanged(uint8,uint8,uint8)\":{\"params\":{\"previous\":\"Old Autonolas priority in the contract\",\"updated\":\"New Autonolas priority in the contract\"}},\"HubConnectorChanged(address,address,uint32)\":{\"params\":{\"chain\":\"Chain ID of the hub connector\",\"hubConnector\":\"New hub connector address\",\"oldHubConnector\":\"Old hub connector address\"}},\"PropagateCooldownChanged(uint256,uint256)\":{\"params\":{\"oldPropagateCooldown\":\"Old cooldown period\",\"propagateCooldown\":\"New cooldown period\"}},\"RootManagerChanged(address,address)\":{\"params\":{\"oldRootManager\":\"Old root manager address in the contract\",\"rootManager\":\"New root manager address in the contract\"}}},\"kind\":\"dev\",\"methods\":{\"addRelayer(address)\":{\"params\":{\"_relayer\":\"- Relayer address to add.\"}},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)\":{\"params\":{\"_args\":\"- ExecuteArgs arguments.\",\"_fee\":\"- Fee to be paid to relayer.\"},\"returns\":{\"transferId\":\"- The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for reconciliation to occur.\"}},\"finalize(bytes32,uint256,uint256)\":{\"params\":{\"_endOfDispute\":\"The block in which the dispute period for proposed root finalizes\",\"_proposedAggregateRoot\":\"The aggregate root currently proposed\",\"_rootTimestamp\":\"Block.timestamp at which the root was finalized in the root manager contract.\"}},\"finalizeAndPropagate(address[],uint256[],bytes[],bytes32,uint256)\":{\"params\":{\"_connectors\":\"Array of connectors: should match exactly the array of `connectors` in storage;\",\"_encodedData\":\"Array of encodedData: extra params for each AMB if required\",\"_endOfDispute\":\"The timestamp when the dispute period ends.\",\"_fees\":\"Array of fees in native token for an AMB if required\",\"_proposedAggregateRoot\":\"The aggregate root to be proposed.\"}},\"finalizeAndPropagateKeep3r(address[],uint256[],bytes[],bytes32,uint256)\":{\"params\":{\"_connectors\":\"Array of connectors: should match exactly the array of `connectors` in storage;\",\"_encodedData\":\"Array of encodedData: extra params for each AMB if required\",\"_endOfDispute\":\"The timestamp when the dispute period ends.\",\"_fees\":\"Array of fees in native token for an AMB if required\",\"_proposedAggregateRoot\":\"The aggregate root to be proposed.\"}},\"finalizeOnRoot(bytes32,uint256)\":{\"params\":{\"_endOfDispute\":\"The block in which the dispute period for proposed root finalizes\",\"_proposedAggregateRoot\":\"The aggregate root currently proposed\"}},\"processFromRoot(bytes,uint32,bytes32)\":{\"params\":{\"_encodedData\":\"Array of encoded data for HubConnector function.\",\"_fromChain\":\"Chain ID of the chain the message is coming from.\",\"_l2Hash\":\"Hash of the message on the L2 chain.\"}},\"processFromRootKeep3r(bytes,uint32,bytes32)\":{\"params\":{\"_encodedData\":\"Array of encoded data for HubConnector function.\",\"_fromChain\":\"Chain ID of the chain the message is coming from.\",\"_l2Hash\":\"Hash of the message on the L2 chain.\"}},\"propagate(address[],uint256[],bytes[],uint256)\":{\"params\":{\"_connectors\":\"Array of connectors: should match exactly the array of `connectors` in storage; used here to reduce gas costs, and keep them static regardless of number of supported domains.\",\"_encodedData\":\"Array of encodedData: extra params for each AMB if required\",\"_messageFees\":\"Array of fees in native token for an AMB if required\",\"_relayerFee\":\"Fee to be paid to relayer\"}},\"propagateKeep3r(address[],uint256[],bytes[])\":{\"params\":{\"_connectors\":\"Array of connectors: should match exactly the array of `connectors` in storage; used here to reduce gas costs, and keep them static regardless of number of supported domains.\",\"_encodedData\":\"Array of encodedData: extra params for each AMB if required\",\"_messageFees\":\"Array of fees in native token for an AMB if required\"}},\"propagateWorkable(uint32[])\":{\"returns\":{\"_0\":\"True if the RootManager has a workable root.\"}},\"proposeAggregateRoot(bytes32,uint256,bytes,uint256)\":{\"details\":\"_rootTimestamp is required for off-chain agents to be able to know which root they should fetch from the root manager contract in order to compare it with the one being proposed. The off-chain agents should also ensure the proposed root is not an old one.\",\"params\":{\"_aggregateRoot\":\"The aggregate root to propose.\",\"_fee\":\"- Fee to be paid to relayer.\",\"_rootTimestamp\":\"Block.timestamp at which the root was finalized in the root manager contract.\",\"_signature\":\"Signature from the approved proposer.\"}},\"proposeAggregateRootOnRoot(uint256,bytes32,bytes32[],uint32[],bytes)\":{\"details\":\"This contract will validate the signer is a whitelisted proposer on the RootManager, and then call `propose` itself. This means this contract must *also* be whitelisted as a proposer on the RootManager.\",\"params\":{\"_aggregateRoot\":\"The aggregate root to be proposed.\",\"_domains\":\"The domains of the snapshots to be proposed.\",\"_signature\":\"Signature from the approved proposer.\",\"_snapshotId\":\"The snapshot id of the root to be proposed.\",\"_snapshotsRoots\":\"The roots of the connectors included in the aggregate.\"}},\"proposeAggregateRootOnRootKeep3r(uint256,bytes32,bytes32[],uint32[],bytes)\":{\"details\":\"This contract will validate the signer is a whitelisted proposer on the RootManager, and then call `propose` itself. This means this contract must *also* be whitelisted as a proposer on the RootManager.\",\"params\":{\"_aggregateRoot\":\"The aggregate root to be proposed.\",\"_domains\":\"The domains of the snapshots to be proposed.\",\"_snapshotId\":\"The snapshot id of the root to be proposed.\",\"_snapshotsRoots\":\"The roots of the connectors included in the aggregate.\"}},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)\":{\"params\":{\"_aggregateIndex\":\"Index of the inbound root in the aggregator's merkle tree in the hub.\",\"_aggregatePath\":\"Merkle path of inclusion for the inbound root.\",\"_aggregateRoot\":\"The target aggregate root we want to prove inclusion for. This root must have already been delivered to this spoke connector contract and surpassed the validation period.\",\"_fee\":\"- Fee to be paid to relayer.\",\"_proofs\":\"Batch of Proofs containing messages for proving/processing.\"}},\"removeRelayer(address)\":{\"params\":{\"_relayer\":\"- Relayer address to remove.\"}},\"send(bytes,uint256,uint256)\":{\"params\":{\"_encodedData\":\"- Data to be sent to Connext SpokeConnector\",\"_messageFee\":\"- Fee to be paid to the SpokeConnector for connected AMBs that require fees.\",\"_relayerFee\":\"- Fee to be paid to relayer.\"}},\"setAutonolas(address)\":{\"params\":{\"_autonolas\":\"- New Autonolas contract address.\"}},\"setAutonolasPriority(uint8,uint8)\":{\"params\":{\"_autonolasPriority\":\"- New Autonolas priority.\"}},\"setConnext(address)\":{\"params\":{\"_connext\":\"- New Connext address.\"}},\"setFeeCollector(address)\":{\"params\":{\"_feeCollector\":\"- New Gelato Fee Collector address.\"}},\"setFinalizeCooldown(uint256)\":{\"params\":{\"_finalizeCooldown\":\"The new cooldown in seconds.\"}},\"setGelatoRelayer(address)\":{\"params\":{\"_gelatoRelayer\":\"- New Gelato relayer address.\"}},\"setHubConnector(address,uint32)\":{\"params\":{\"_hubConnector\":\"The address of the new HubConnector on this domain.\"}},\"setKeep3r(address)\":{\"params\":{\"_keep3r\":\"- New Keep3r contract address.\"}},\"setPropagateCooldown(uint256)\":{\"params\":{\"_propagateCooldown\":\"The new cooldown in seconds.\"}},\"setProposeAggregateRootCooldown(uint256)\":{\"params\":{\"_proposeCooldown\":\"The new cooldown in seconds.\"}},\"setRootManager(address)\":{\"params\":{\"_rootManager\":\"The address of the new RootManager on this domain.\"}},\"setSpokeConnector(address)\":{\"params\":{\"_spokeConnector\":\"- New SpokeConnector address.\"}}},\"stateVariables\":{\"autonolas\":{\"details\":\"Special consideration for Autonolas keeper\"},\"autonolasPriority\":{\"details\":\"number between 0 and 10 to determine priority that Autonolas has for jobs. 0 is disabled, 10 will work for every block.\"}},\"title\":\"RelayerProxyHub\",\"version\":1},\"userdoc\":{\"events\":{\"AutonolasChanged(address,address)\":{\"notice\":\"Emitted when Autonolas address is updated by admin\"},\"AutonolasPriorityChanged(uint8,uint8,uint8)\":{\"notice\":\"Emitted when Autonolas priority is updated by admin\"},\"ConnextChanged(address,address)\":{\"notice\":\"Emitted when Connext contract address is updated by admin\"},\"FeeCollectorChanged(address,address)\":{\"notice\":\"Emitted when FeeCollectorChanged address is updated by admin\"},\"FinalizeCooldownChanged(uint256,uint256)\":{\"notice\":\"Emitted when the cooldown period for finalize is updated\"},\"FundsDeducted(address,uint256,uint256)\":{\"notice\":\"Emitted when funds removed from the contract by admin\"},\"FundsReceived(uint256,uint256)\":{\"notice\":\"Emitted when funds added to the contract\"},\"GelatoRelayerChanged(address,address)\":{\"notice\":\"Emitted when GelatoRelayer address is updated by admin\"},\"HubConnectorChanged(address,address,uint32)\":{\"notice\":\"Emitted when a new hub connector is updated\"},\"Keep3rChanged(address,address)\":{\"notice\":\"Emitted when Keep3r address is updated by admin\"},\"PropagateCooldownChanged(uint256,uint256)\":{\"notice\":\"Emitted when the cooldown period for propagate is updated\"},\"ProposeAggregateRootCooldownChanged(uint256,uint256)\":{\"notice\":\"Emitted when the cooldown period for proposeAggregateRoot is updated\"},\"RelayerAdded(address)\":{\"notice\":\"Emitted when a new relayer is allowlisted by admin\"},\"RelayerRemoved(address)\":{\"notice\":\"Emitted when a relayer is removed from allowlist by admin\"},\"RootManagerChanged(address,address)\":{\"notice\":\"Emitted when the root manager is updated by admin\"},\"SpokeConnectorChanged(address,address)\":{\"notice\":\"Emitted when SpokeConnector contract address is updated by admin\"}},\"kind\":\"user\",\"methods\":{\"acceptProposedOwner()\":{\"notice\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"addRelayer(address)\":{\"notice\":\"Adds a relayer address to the allowed relayers mapping.\"},\"autonolas()\":{\"notice\":\"Address of Autonolas keeper contract\"},\"autonolasPriority(uint8)\":{\"notice\":\"Mapping of Autonolas priority function to priority number\"},\"constructor\":{\"notice\":\"Creates a new RelayerProxyHub instance.\"},\"delay()\":{\"notice\":\"Returns the delay period before a new owner can be accepted.\"},\"execute(((uint32,uint32,uint32,address,address,bool,bytes,uint256,address,uint256,uint256,uint256,bytes32),address[],bytes[],address,bytes),uint256)\":{\"notice\":\"Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"finalize(bytes32,uint256,uint256)\":{\"notice\":\"Wraps the `finalize` function on root manager\"},\"finalizeAndPropagate(address[],uint256[],bytes[],bytes32,uint256)\":{\"notice\":\"Wraps the `finalizeAndPropagate` function\"},\"finalizeAndPropagateKeep3r(address[],uint256[],bytes[],bytes32,uint256)\":{\"notice\":\"Wraps the `finalizeAndPropagate` function\"},\"finalizeCooldown()\":{\"notice\":\"Delay for the finalize function\"},\"finalizeOnRoot(bytes32,uint256)\":{\"notice\":\"Wraps the `finalize` function on root manager\"},\"hubConnectors(uint32)\":{\"notice\":\"Mapping of identifier to hub connector contract address\"},\"lastFinalizeAt()\":{\"notice\":\"Timestamp of the last time the finalize job was worked.\"},\"lastPropagateAt()\":{\"notice\":\"Timestamp of the last time the propagate job was worked.\"},\"lastProposeAggregateRootAt()\":{\"notice\":\"Timestamp of when last aggregate was proposed\"},\"owner()\":{\"notice\":\"Returns the address of the current owner.\"},\"processFromRoot(bytes,uint32,bytes32)\":{\"notice\":\"Wraps the call to processFromRoot() on RootManager. Only allowed to be called by registered relayer.\"},\"processFromRootKeep3r(bytes,uint32,bytes32)\":{\"notice\":\"Wraps the call to processFromRoot() on RootManager and pays with Keep3r credits. Only allowed to be called by registered Keep3r.\"},\"processedRootMessages(uint32,bytes32)\":{\"notice\":\"Mapping of identifier to root message hash to boolean indicating if the message has been processed\"},\"propagate(address[],uint256[],bytes[],uint256)\":{\"notice\":\"Wraps the call to propagate() on RootManager and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"propagateCooldown()\":{\"notice\":\"Delay for the propagate function\"},\"propagateKeep3r(address[],uint256[],bytes[])\":{\"notice\":\"Wraps the call to propagate() on RootManager and pays with Keep3r credits. Only allowed to be called by registered Keep3r.\"},\"propagateWorkable(uint32[])\":{\"notice\":\"Checks if the RootManager has a workable root. Calls the rootManager's dequeue() function to check if the RootManager has a sendable root. This is an expensive function so it should only be called off-chain to determine if the relayer should call the propagate() function.\"},\"proposeAggregateRoot(bytes32,uint256,bytes,uint256)\":{\"notice\":\"Wraps the call to proposeAggregateRoot() on SpokeConnector and pays either the caller or hardcoded relayer\"},\"proposeAggregateRootCooldown()\":{\"notice\":\"Delay for the proposeAggregateRoot function\"},\"proposeAggregateRootOnRoot(uint256,bytes32,bytes32[],uint32[],bytes)\":{\"notice\":\"Wraps the `proposeAggregateRoot` function of RootManager\"},\"proposeAggregateRootOnRootKeep3r(uint256,bytes32,bytes32[],uint32[],bytes)\":{\"notice\":\"Wraps the `proposeAggregateRoot` function of RootManager\"},\"proposeNewOwner(address)\":{\"notice\":\"Sets the timestamp for an owner to be proposed, and sets the newly proposed owner as step 1 in a 2-step process\"},\"proposed()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proposedTimestamp()\":{\"notice\":\"Returns the address of the proposed owner.\"},\"proveAndProcess((bytes,bytes32[32],uint256)[],bytes32,bytes32[32],uint256,uint256)\":{\"notice\":\"Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"removeRelayer(address)\":{\"notice\":\"Removes a relayer address from the allowed relayers mapping.\"},\"renounceOwnership()\":{\"notice\":\"Renounces ownership of the contract after a delay\"},\"renounced()\":{\"notice\":\"Indicates if the ownership has been renounced() by checking if current owner is address(0)\"},\"rootManager()\":{\"notice\":\"Address of the RootManager contract\"},\"send(bytes,uint256,uint256)\":{\"notice\":\"Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this contract's balance for completing the transaction.\"},\"sendRootToHubSpoke()\":{\"notice\":\"Wraps the `sendRootToHubSpoke` function of RootManager\"},\"setAutonolas(address)\":{\"notice\":\"Updates the Autonolas contract address on this contract.\"},\"setAutonolasPriority(uint8,uint8)\":{\"notice\":\"Updates the Autonolas priority on this contract.\"},\"setConnext(address)\":{\"notice\":\"Updates the Connext address on this contract.\"},\"setFeeCollector(address)\":{\"notice\":\"Updates the Gelato Fee Collector address on this contract.\"},\"setFinalizeCooldown(uint256)\":{\"notice\":\"Updates the finalize cooldown.\"},\"setGelatoRelayer(address)\":{\"notice\":\"Updates the Gelato relayer address on this contract.\"},\"setHubConnector(address,uint32)\":{\"notice\":\"Updates the HubConnector address.\"},\"setKeep3r(address)\":{\"notice\":\"Updates the Keep3r contract address on this contract.\"},\"setPropagateCooldown(uint256)\":{\"notice\":\"Updates the propagate cooldown.\"},\"setProposeAggregateRootCooldown(uint256)\":{\"notice\":\"Updates the propose cooldown.\"},\"setRootManager(address)\":{\"notice\":\"Updates the RootManager address.\"},\"setSpokeConnector(address)\":{\"notice\":\"Updates the SpokeConnector address on this contract.\"},\"withdraw(address)\":{\"notice\":\"Withdraws tokens stored on this contract to msg.sender.\"}},\"notice\":\"This is a temporary contract that wraps the Connext RootManager's propagate() function so that it can be called by Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/core/connext/helpers/RelayerProxyHub.sol\":\"RelayerProxyHub\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GelatoRelayBase} from \\\"./base/GelatoRelayBase.sol\\\";\\n\\nuint256 constant _FEE_COLLECTOR_START = 20;\\n\\n// WARNING: Do not use this free fn by itself, always inherit GelatoRelayFeeCollector\\n// solhint-disable-next-line func-visibility, private-vars-leading-underscore\\nfunction __getFeeCollector() pure returns (address feeCollector) {\\n assembly {\\n feeCollector := shr(\\n 96,\\n calldataload(sub(calldatasize(), _FEE_COLLECTOR_START))\\n )\\n }\\n}\\n\\n/**\\n * @dev Context variant with only feeCollector appended to msg.data\\n * Expects calldata encoding:\\n * abi.encodePacked(bytes data, address feeCollectorAddress)\\n * Therefore, we're expecting 20bytes to be appended to normal msgData\\n * 20bytes start offsets from calldatasize:\\n * feeCollector: -20\\n */\\n/// @dev Do not use with GelatoRelayContext - pick only one\\nabstract contract GelatoRelayFeeCollector is GelatoRelayBase {\\n function _getMsgData() internal view returns (bytes calldata) {\\n return\\n _isGelatoRelay(msg.sender)\\n ? msg.data[:msg.data.length - _FEE_COLLECTOR_START]\\n : msg.data;\\n }\\n\\n // Only use with GelatoRelayBase onlyGelatoRelay or `_isGelatoRelay` checks\\n function _getFeeCollector() internal pure returns (address) {\\n return __getFeeCollector();\\n }\\n}\\n\",\"keccak256\":\"0x24d0c82254158c5d7cbb88bfafdab8197dbafc8be6e03d6dd13a3479bf7fc18d\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/base/GelatoRelayBase.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\nimport {GELATO_RELAY} from \\\"../constants/GelatoRelay.sol\\\";\\n\\nabstract contract GelatoRelayBase {\\n modifier onlyGelatoRelay() {\\n require(_isGelatoRelay(msg.sender), \\\"onlyGelatoRelay\\\");\\n _;\\n }\\n\\n function _isGelatoRelay(address _forwarder) internal pure returns (bool) {\\n return _forwarder == GELATO_RELAY;\\n }\\n}\\n\",\"keccak256\":\"0x8b8ca04a1b6dce1b14b0b5f59783defe5562f876f0d6127aefa3e251b7631ba1\",\"license\":\"MIT\"},\"@gelatonetwork/relay-context/contracts/constants/GelatoRelay.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.1;\\n\\naddress constant GELATO_RELAY = 0xaBcC9b596420A9E9172FD5938620E265a0f9Df92;\\naddress constant GELATO_RELAY_ERC2771 = 0xBf175FCC7086b4f9bd59d5EAE8eA67b8f940DE0d;\\n\",\"keccak256\":\"0xa3f9966896db1bfafbcb1b58d1d76b44d1cd1660986e675d57398d5a9a74d242\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initialized`\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Internal function that returns the initialized version. Returns `_initializing`\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC20Upgradeable.sol\\\";\\nimport \\\"./extensions/IERC20MetadataUpgradeable.sol\\\";\\nimport \\\"../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n * For a generic mechanism see {ERC20PresetMinterPauser}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC20\\n * applications.\\n *\\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\\n * This allows applications to reconstruct the allowance for all accounts just\\n * by listening to said events. Other implementations of the EIP may not emit\\n * these events, as it isn't required by the specification.\\n *\\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\\n * functions have been added to mitigate the well-known issues around setting\\n * allowances. See {IERC20-approve}.\\n */\\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable {\\n mapping(address => uint256) private _balances;\\n\\n mapping(address => mapping(address => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * The default value of {decimals} is 18. To select a different value for\\n * {decimals} you should overload it.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\\n __ERC20_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the value {ERC20} uses, unless this function is\\n * overridden;\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual override returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual override returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `amount`.\\n */\\n function transfer(address to, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, amount);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Emits an {Approval} event indicating the updated allowance. This is not\\n * required by the EIP. See the note at the beginning of {ERC20}.\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `amount`.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) public virtual override returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, amount);\\n _transfer(from, to, amount);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically increases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, allowance(owner, spender) + addedValue);\\n return true;\\n }\\n\\n /**\\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\\n *\\n * This is an alternative to {approve} that can be used as a mitigation for\\n * problems described in {IERC20-approve}.\\n *\\n * Emits an {Approval} event indicating the updated allowance.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `spender` must have allowance for the caller of at least\\n * `subtractedValue`.\\n */\\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\\n address owner = _msgSender();\\n uint256 currentAllowance = allowance(owner, spender);\\n require(currentAllowance >= subtractedValue, \\\"ERC20: decreased allowance below zero\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - subtractedValue);\\n }\\n\\n return true;\\n }\\n\\n /**\\n * @dev Moves `amount` of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `from` must have a balance of at least `amount`.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {\\n require(from != address(0), \\\"ERC20: transfer from the zero address\\\");\\n require(to != address(0), \\\"ERC20: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, amount);\\n\\n uint256 fromBalance = _balances[from];\\n require(fromBalance >= amount, \\\"ERC20: transfer amount exceeds balance\\\");\\n unchecked {\\n _balances[from] = fromBalance - amount;\\n // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by\\n // decrementing then incrementing.\\n _balances[to] += amount;\\n }\\n\\n emit Transfer(from, to, amount);\\n\\n _afterTokenTransfer(from, to, amount);\\n }\\n\\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function _mint(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: mint to the zero address\\\");\\n\\n _beforeTokenTransfer(address(0), account, amount);\\n\\n _totalSupply += amount;\\n unchecked {\\n // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.\\n _balances[account] += amount;\\n }\\n emit Transfer(address(0), account, amount);\\n\\n _afterTokenTransfer(address(0), account, amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens.\\n */\\n function _burn(address account, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC20: burn from the zero address\\\");\\n\\n _beforeTokenTransfer(account, address(0), amount);\\n\\n uint256 accountBalance = _balances[account];\\n require(accountBalance >= amount, \\\"ERC20: burn amount exceeds balance\\\");\\n unchecked {\\n _balances[account] = accountBalance - amount;\\n // Overflow not possible: amount <= accountBalance <= totalSupply.\\n _totalSupply -= amount;\\n }\\n\\n emit Transfer(account, address(0), amount);\\n\\n _afterTokenTransfer(account, address(0), amount);\\n }\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n */\\n function _approve(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n require(owner != address(0), \\\"ERC20: approve from the zero address\\\");\\n require(spender != address(0), \\\"ERC20: approve to the zero address\\\");\\n\\n _allowances[owner][spender] = amount;\\n emit Approval(owner, spender, amount);\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\\n *\\n * Does not update the allowance amount in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Might emit an {Approval} event.\\n */\\n function _spendAllowance(\\n address owner,\\n address spender,\\n uint256 amount\\n ) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n require(currentAllowance >= amount, \\\"ERC20: insufficient allowance\\\");\\n unchecked {\\n _approve(owner, spender, currentAllowance - amount);\\n }\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * will be transferred to `to`.\\n * - when `from` is zero, `amount` tokens will be minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any transfer of tokens. This includes\\n * minting and burning.\\n *\\n * Calling conditions:\\n *\\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * has been transferred to `to`.\\n * - when `from` is zero, `amount` tokens have been minted for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens have been burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual {}\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[45] private __gap;\\n}\\n\",\"keccak256\":\"0xb1d9e69cf8073efa574b31b1f840e20709139c19bfb27e60b16393d6073f3d42\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC20Upgradeable.sol\\\";\\nimport \\\"../../../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../../../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC20} that allows token holders to destroy both their own\\n * tokens and those that they have an allowance for, in a way that can be\\n * recognized off-chain (via event analysis).\\n */\\nabstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable {\\n function __ERC20Burnable_init() internal onlyInitializing {\\n }\\n\\n function __ERC20Burnable_init_unchained() internal onlyInitializing {\\n }\\n /**\\n * @dev Destroys `amount` tokens from the caller.\\n *\\n * See {ERC20-_burn}.\\n */\\n function burn(uint256 amount) public virtual {\\n _burn(_msgSender(), amount);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens from `account`, deducting from the caller's\\n * allowance.\\n *\\n * See {ERC20-_burn} and {ERC20-allowance}.\\n *\\n * Requirements:\\n *\\n * - the caller must have allowance for ``accounts``'s tokens of at least\\n * `amount`.\\n */\\n function burnFrom(address account, uint256 amount) public virtual {\\n _spendAllowance(account, _msgSender(), amount);\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea2c6f9d434127bf36b1e3e5ebaaf6d28a64dbaeea560508e570014e905a5ad2\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20MetadataUpgradeable is IERC20Upgradeable {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n _requireNotPaused();\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n _requirePaused();\\n _;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Throws if the contract is paused.\\n */\\n function _requireNotPaused() internal view virtual {\\n require(!paused(), \\\"Pausable: paused\\\");\\n }\\n\\n /**\\n * @dev Throws if the contract is not paused.\\n */\\n function _requirePaused() internal view virtual {\\n require(paused(), \\\"Pausable: not paused\\\");\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0x190dd6f8d592b7e4e930feb7f4313aeb8e1c4ad3154c27ce1cf6a512fc30d8cc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `from` to `to` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 amount\\n ) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC20 standard.\\n *\\n * _Available since v4.1._\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x8de418a5503946cabe331f35fe242d3201a73f67f77aaeb7110acb1f30423aca\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\\n *\\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\\n * need to send a transaction, and thus is not required to hold Ether at all.\\n */\\ninterface IERC20Permit {\\n /**\\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\\n * given ``owner``'s signed approval.\\n *\\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\\n * ordering also apply here.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n * - `deadline` must be a timestamp in the future.\\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\\n * over the EIP712-formatted function arguments.\\n * - the signature must use ``owner``'s current nonce (see {nonces}).\\n *\\n * For more information on the signature format, see the\\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\\n * section].\\n */\\n function permit(\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) external;\\n\\n /**\\n * @dev Returns the current nonce for `owner`. This value must be\\n * included whenever a signature is generated for {permit}.\\n *\\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\\n * prevents a signature from being used multiple times.\\n */\\n function nonces(address owner) external view returns (uint256);\\n\\n /**\\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function DOMAIN_SEPARATOR() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../extensions/draft-IERC20Permit.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n function safePermit(\\n IERC20Permit token,\\n address owner,\\n address spender,\\n uint256 value,\\n uint256 deadline,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal {\\n uint256 nonceBefore = token.nonces(owner);\\n token.permit(owner, spender, value, deadline, v, r, s);\\n uint256 nonceAfter = token.nonces(owner);\\n require(nonceAfter == nonceBefore + 1, \\\"SafeERC20: permit did not succeed\\\");\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9b72f93be69ca894d8492c244259615c4a742afc8d63720dbc8bb81087d9b238\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf96f969e24029d43d0df89e59d365f277021dac62b48e1c1e3ebe0acdd7f1ca1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n}\\n\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Strings.sol\\\";\\n\\n/**\\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\\n *\\n * These functions can be used to verify that a message was signed by the holder\\n * of the private keys of a given address.\\n */\\nlibrary ECDSA {\\n enum RecoverError {\\n NoError,\\n InvalidSignature,\\n InvalidSignatureLength,\\n InvalidSignatureS,\\n InvalidSignatureV // Deprecated in v4.8\\n }\\n\\n function _throwError(RecoverError error) private pure {\\n if (error == RecoverError.NoError) {\\n return; // no error: do nothing\\n } else if (error == RecoverError.InvalidSignature) {\\n revert(\\\"ECDSA: invalid signature\\\");\\n } else if (error == RecoverError.InvalidSignatureLength) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n } else if (error == RecoverError.InvalidSignatureS) {\\n revert(\\\"ECDSA: invalid signature 's' value\\\");\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature` or error string. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n *\\n * Documentation for signature generation:\\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {\\n if (signature.length == 65) {\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n /// @solidity memory-safe-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n return tryRecover(hash, v, r, s);\\n } else {\\n return (address(0), RecoverError.InvalidSignatureLength);\\n }\\n }\\n\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, signature);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\\n *\\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address, RecoverError) {\\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\\n uint8 v = uint8((uint256(vs) >> 255) + 27);\\n return tryRecover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\\n *\\n * _Available since v4.2._\\n */\\n function recover(\\n bytes32 hash,\\n bytes32 r,\\n bytes32 vs\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, r, vs);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n *\\n * _Available since v4.3._\\n */\\n function tryRecover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address, RecoverError) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (301): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (302): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\\n return (address(0), RecoverError.InvalidSignatureS);\\n }\\n\\n // If the signature is valid (and not malleable), return the signer address\\n address signer = ecrecover(hash, v, r, s);\\n if (signer == address(0)) {\\n return (address(0), RecoverError.InvalidSignature);\\n }\\n\\n return (signer, RecoverError.NoError);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n (address recovered, RecoverError error) = tryRecover(hash, v, r, s);\\n _throwError(error);\\n return recovered;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from `s`. This\\n * produces hash corresponding to the one signed with the\\n * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]\\n * JSON-RPC method as part of EIP-191.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n\\\", Strings.toString(s.length), s));\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Typed Data, created from a\\n * `domainSeparator` and a `structHash`. This produces hash corresponding\\n * to the one signed with the\\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]\\n * JSON-RPC method as part of EIP-712.\\n *\\n * See {recover}.\\n */\\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", domainSeparator, structHash));\\n }\\n}\\n\",\"keccak256\":\"0xda898fa084aa1ddfdb346e6a40459e00a59d87071cce7c315a46d648dd71d0ba\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator\\n ) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1);\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(\\n uint256 x,\\n uint256 y,\\n uint256 denominator,\\n Rounding rounding\\n ) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10**64) {\\n value /= 10**64;\\n result += 64;\\n }\\n if (value >= 10**32) {\\n value /= 10**32;\\n result += 32;\\n }\\n if (value >= 10**16) {\\n value /= 10**16;\\n result += 16;\\n }\\n if (value >= 10**8) {\\n value /= 10**8;\\n result += 8;\\n }\\n if (value >= 10**4) {\\n value /= 10**4;\\n result += 4;\\n }\\n if (value >= 10**2) {\\n value /= 10**2;\\n result += 2;\\n }\\n if (value >= 10**1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/core/connext/helpers/LPToken.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {ERC20Upgradeable} from \\\"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol\\\";\\nimport {OwnableUpgradeable} from \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\n/**\\n * @title Liquidity Provider Token\\n * @notice This token is an ERC20 detailed token with added capability to be minted by the owner.\\n * It is used to represent user's shares when providing liquidity to swap contracts.\\n * @dev Only Swap contracts should initialize and own LPToken contracts.\\n */\\ncontract LPToken is ERC20Upgradeable, OwnableUpgradeable {\\n // ============ Storage ============\\n\\n // ============ Initializer ============\\n\\n /**\\n * @notice Initializes this LPToken contract with the given name and symbol\\n * @dev The caller of this function will become the owner. A Swap contract should call this\\n * in its initializer function.\\n * @param name name of this token\\n * @param symbol symbol of this token\\n */\\n function initialize(string memory name, string memory symbol) external initializer returns (bool) {\\n __Context_init_unchained();\\n __ERC20_init_unchained(name, symbol);\\n __Ownable_init_unchained();\\n return true;\\n }\\n\\n // ============ External functions ============\\n\\n /**\\n * @notice Mints the given amount of LPToken to the recipient.\\n * @dev only owner can call this mint function\\n * @param recipient address of account to receive the tokens\\n * @param amount amount of tokens to mint\\n */\\n function mint(address recipient, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot mint 0\\\");\\n _mint(recipient, amount);\\n }\\n\\n /**\\n * @notice Burns the given amount of LPToken from provided account\\n * @dev only owner can call this burn function\\n * @param account address of account from which to burn token\\n * @param amount amount of tokens to mint\\n */\\n function burnFrom(address account, uint256 amount) external onlyOwner {\\n require(amount != 0, \\\"LPToken: cannot burn 0\\\");\\n _burn(account, amount);\\n }\\n\\n // ============ Internal functions ============\\n\\n /**\\n * @dev Overrides ERC20._beforeTokenTransfer() which get called on every transfers including\\n * minting and burning. This ensures that Swap.updateUserWithdrawFees are called everytime.\\n * This assumes the owner is set to a Swap contract's address.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 amount\\n ) internal virtual override(ERC20Upgradeable) {\\n super._beforeTokenTransfer(from, to, amount);\\n require(to != address(this), \\\"LPToken: cannot send to itself\\\");\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[50] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x81895c7ab368c08fe0b8fc3798535c2879ccaf0c3c2e1aaee5bcd43c4211ce9d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/helpers/RelayerProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {GelatoRelayFeeCollector} from \\\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../../../shared/ProposedOwnable.sol\\\";\\nimport {IConnext, ExecuteArgs} from \\\"../interfaces/IConnext.sol\\\";\\n\\ninterface ISpokeConnector {\\n struct Proof {\\n bytes message;\\n bytes32[32] path;\\n uint256 index;\\n }\\n\\n function DOMAIN() external view returns (uint32);\\n\\n function proveAndProcess(\\n Proof[] calldata _proofs,\\n bytes32 _aggregateRoot,\\n bytes32[32] calldata _aggregatePath,\\n uint256 _aggregateIndex\\n ) external;\\n\\n function send(bytes memory _encodedData) external payable;\\n\\n function proposeAggregateRoot(bytes32 _aggregateRoot, uint256 _rootTimestamp) external;\\n\\n function finalize(bytes32 _proposedAggregateRoot, uint256 _rootTimestamp, uint256 _endOfDispute) external;\\n\\n function allowlistedProposers(address _proposer) external view returns (bool);\\n}\\n\\ninterface IKeep3rV2 {\\n function isKeeper(address _keeper) external returns (bool _isKeeper);\\n\\n function worked(address _keeper) external;\\n}\\n\\n/**\\n * @title RelayerProxy\\n * @author Connext Labs, Inc.\\n * @notice This is a temporary contract that wraps fast path functions in the Connext interface so that they can be called by\\n * Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\\n */\\ncontract RelayerProxy is ProposedOwnable, ReentrancyGuard, GelatoRelayFeeCollector {\\n using ECDSA for bytes32;\\n // ============ Properties ============\\n address public gelatoRelayer;\\n address public feeCollector;\\n IKeep3rV2 public keep3r;\\n IConnext public connext;\\n ISpokeConnector public spokeConnector;\\n uint32 public domain;\\n\\n /**\\n * @notice Delay for the proposeAggregateRoot function\\n * @dev Can be updated by admin\\n */\\n uint256 public proposeAggregateRootCooldown;\\n\\n /**\\n * @notice Timestamp of when last aggregate was proposed\\n */\\n uint256 public lastProposeAggregateRootAt;\\n\\n /**\\n * @notice Delay for the finalize function\\n */\\n uint256 public finalizeCooldown;\\n\\n /**\\n * @notice Timestamp of the last time the finalize job was worked.\\n */\\n uint256 public lastFinalizeAt;\\n\\n mapping(address => bool) public allowedRelayer;\\n\\n // ============ Modifier ============\\n\\n modifier onlyRelayer() {\\n if (!allowedRelayer[msg.sender]) {\\n revert RelayerProxy__onlyRelayer_notRelayer();\\n }\\n _;\\n }\\n\\n modifier definedAddress(address _input) {\\n if (_input == address(0)) {\\n revert RelayerProxy__definedAddress_empty();\\n }\\n _;\\n }\\n\\n // Modifier in charge of verifying if the caller is a registered keeper as well as\\n // rewarding them with an amount of KP3R equal to their gas spent + premium.\\n modifier validateAndPayWithCredits(address _keeper) {\\n if (!keep3r.isKeeper(_keeper)) {\\n revert RelayerProxy__validateAndPayWithCredits_notKeep3r();\\n }\\n _;\\n keep3r.worked(_keeper); // Pays the keeper for the work.\\n }\\n\\n modifier onlyProposeCooledDown() {\\n if (block.timestamp < lastProposeAggregateRootAt + proposeAggregateRootCooldown) {\\n revert RelayerProxy__proposeAggregateRootCooledDown_notCooledDown();\\n }\\n _;\\n lastProposeAggregateRootAt = block.timestamp;\\n }\\n\\n modifier onlyFinalizeCooledDown() {\\n if (block.timestamp < lastFinalizeAt + finalizeCooldown) {\\n revert RelayerProxy__finalizeCooledDown_notCooledDown();\\n }\\n _;\\n lastFinalizeAt = block.timestamp;\\n }\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted when funds added to the contract\\n * @param amount The amount added\\n * @param balance The updated balance of the contract\\n */\\n event FundsReceived(uint256 amount, uint256 balance);\\n\\n /**\\n * @notice Emitted when funds removed from the contract by admin\\n * @param token The token address\\n * @param amount The amount removed\\n * @param balance The updated balance of the contract\\n */\\n event FundsDeducted(address token, uint256 amount, uint256 balance);\\n\\n /**\\n * @notice Emitted when a new relayer is allowlisted by admin\\n * @param relayer Address of the added relayer\\n */\\n event RelayerAdded(address relayer);\\n\\n /**\\n * @notice Emitted when a relayer is removed from allowlist by admin\\n * @param relayer Address of the removed relayer\\n */\\n event RelayerRemoved(address relayer);\\n\\n /**\\n * @notice Emitted when Connext contract address is updated by admin\\n * @param updated New Connext address in the contract\\n * @param previous Old Connext address in the contract\\n */\\n event ConnextChanged(address updated, address previous);\\n\\n /**\\n * @notice Emitted when SpokeConnector contract address is updated by admin\\n * @param updated New SpokeConnector address in the contract\\n * @param previous Old SpokeConnector address in the contract\\n */\\n event SpokeConnectorChanged(address updated, address previous);\\n\\n /**\\n * @notice Emitted when GelatoRelayer address is updated by admin\\n * @param updated New GelatoRelayer address in the contract\\n * @param previous Old Gelatorelayer address in the contract\\n */\\n event GelatoRelayerChanged(address updated, address previous);\\n\\n /**\\n * @notice Emitted when FeeCollectorChanged address is updated by admin\\n * @param updated New FeeCollectorChanged address in the contract\\n * @param previous Old FeeCollectorChanged address in the contract\\n */\\n event FeeCollectorChanged(address updated, address previous);\\n\\n /**\\n * @notice Emitted when Keep3r address is updated by admin\\n * @param updated New Keep3r address in the contract\\n * @param previous Old Keep3r address in the contract\\n */\\n event Keep3rChanged(address updated, address previous);\\n\\n /**\\n * @notice Emitted when the cooldown period for proposeAggregateRoot is updated\\n * @param proposeAggregateRootCooldown New cooldown period\\n * @param oldProposeAggregateRootCooldown Old cooldown period\\n */\\n event ProposeAggregateRootCooldownChanged(\\n uint256 proposeAggregateRootCooldown,\\n uint256 oldProposeAggregateRootCooldown\\n );\\n\\n /**\\n * @notice Emitted when the cooldown period for finalize is updated\\n * @param finalizeCooldown New cooldown period\\n * @param oldFinalizeCooldown Old cooldown period\\n */\\n event FinalizeCooldownChanged(uint256 finalizeCooldown, uint256 oldFinalizeCooldown);\\n\\n // ============ Error ============\\n error RelayerProxy__addRelayer_relayerAdded();\\n error RelayerProxy__removeRelayer_relayerNotAdded();\\n error RelayerProxy__onlyRelayer_notRelayer();\\n error RelayerProxy__definedAddress_empty();\\n error RelayerProxy__isWorkableBySender_notWorkable();\\n error RelayerProxy__validateAndPayWithCredits_notKeep3r();\\n error RelayerProxy__validateProposeSignature_notProposer(address signer);\\n error RelayerProxy__proposeAggregateRootCooledDown_notCooledDown();\\n error RelayerProxy__finalizeCooledDown_notCooledDown();\\n\\n // ============ Structs ============\\n\\n /**\\n * Struct containing the construstor arguments of a RelayerProxy\\n * @param connext The address of the Connext on this domain.\\n * @param spokeConnector The address of the SpokeConnector on this domain.\\n * @param gelatoRelayer The address of the Gelato relayer on this domain.\\n * @param feeCollector The address of the Gelato Fee Collector on this domain.\\n * @param keep3r The address of the Keep3r on this domain.\\n * @param proposeAggregateRootCooldown The delay for the propose function.\\n * @param finalizeCooldown The delay for the finalize function.\\n */\\n struct ConstructorParams {\\n address connext;\\n address spokeConnector;\\n address gelatoRelayer;\\n address feeCollector;\\n address keep3r;\\n uint256 proposeAggregateRootCooldown;\\n uint256 finalizeCooldown;\\n }\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Creates a new RelayerProxy instance.\\n */\\n constructor(ConstructorParams memory _params) ProposedOwnable() {\\n _setOwner(msg.sender);\\n _setConnext(_params.connext);\\n _setSpokeConnector(_params.spokeConnector);\\n _setGelatoRelayer(_params.gelatoRelayer);\\n _setFeeCollector(_params.feeCollector);\\n _setKeep3r(_params.keep3r);\\n _setProposeAggregateRootCooldown(_params.proposeAggregateRootCooldown);\\n _setFinalizeCooldown(_params.finalizeCooldown);\\n\\n _addRelayer(_params.gelatoRelayer);\\n\\n domain = ISpokeConnector(_params.spokeConnector).DOMAIN();\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Adds a relayer address to the allowed relayers mapping.\\n *\\n * @param _relayer - Relayer address to add.\\n */\\n function addRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\\n _addRelayer(_relayer);\\n }\\n\\n /**\\n * @notice Removes a relayer address from the allowed relayers mapping.\\n *\\n * @param _relayer - Relayer address to remove.\\n */\\n function removeRelayer(address _relayer) external onlyOwner definedAddress(_relayer) {\\n _removeRelayer(_relayer);\\n }\\n\\n /**\\n * @notice Updates the Connext address on this contract.\\n *\\n * @param _connext - New Connext address.\\n */\\n function setConnext(address _connext) external onlyOwner definedAddress(_connext) {\\n _setConnext(_connext);\\n }\\n\\n /**\\n * @notice Updates the SpokeConnector address on this contract.\\n *\\n * @param _spokeConnector - New SpokeConnector address.\\n */\\n function setSpokeConnector(address _spokeConnector) external onlyOwner definedAddress(_spokeConnector) {\\n _setSpokeConnector(_spokeConnector);\\n }\\n\\n /**\\n * @notice Updates the Gelato relayer address on this contract.\\n *\\n * @param _gelatoRelayer - New Gelato relayer address.\\n */\\n function setGelatoRelayer(address _gelatoRelayer) external onlyOwner definedAddress(_gelatoRelayer) {\\n _setGelatoRelayer(_gelatoRelayer);\\n }\\n\\n /**\\n * @notice Updates the Gelato Fee Collector address on this contract.\\n *\\n * @param _feeCollector - New Gelato Fee Collector address.\\n */\\n function setFeeCollector(address _feeCollector) external onlyOwner definedAddress(_feeCollector) {\\n _setFeeCollector(_feeCollector);\\n }\\n\\n /**\\n * @notice Updates the Keep3r contract address on this contract.\\n *\\n * @param _keep3r - New Keep3r contract address.\\n */\\n function setKeep3r(address _keep3r) external onlyOwner definedAddress(_keep3r) {\\n _setKeep3r(_keep3r);\\n }\\n\\n /**\\n * @notice Updates the propose cooldown.\\n * @param _proposeCooldown The new cooldown in seconds.\\n */\\n function setProposeAggregateRootCooldown(uint256 _proposeCooldown) external onlyOwner {\\n _setProposeAggregateRootCooldown(_proposeCooldown);\\n }\\n\\n /**\\n * @notice Updates the finalize cooldown.\\n * @param _finalizeCooldown The new cooldown in seconds.\\n */\\n function setFinalizeCooldown(uint256 _finalizeCooldown) external onlyOwner {\\n _setFinalizeCooldown(_finalizeCooldown);\\n }\\n\\n /**\\n * @notice Updates the propose cooldown period on this contract.\\n *\\n * @param _proposeAggregateRootCooldown - Delay for propose.\\n */\\n function _setProposeAggregateRootCooldown(uint256 _proposeAggregateRootCooldown) internal {\\n emit ProposeAggregateRootCooldownChanged(_proposeAggregateRootCooldown, proposeAggregateRootCooldown);\\n proposeAggregateRootCooldown = _proposeAggregateRootCooldown;\\n }\\n\\n /**\\n * @notice Updates the finalize cooldown period on this contract.\\n *\\n * @param _finalizeCooldown - Delay for finalize.\\n */\\n function _setFinalizeCooldown(uint256 _finalizeCooldown) internal {\\n emit FinalizeCooldownChanged(_finalizeCooldown, finalizeCooldown);\\n finalizeCooldown = _finalizeCooldown;\\n }\\n\\n /**\\n * @notice Withdraws tokens stored on this contract to msg.sender.\\n */\\n function withdraw(address _token) external onlyOwner nonReentrant {\\n uint256 balance = _token == address(0) ? address(this).balance : IERC20(_token).balanceOf(address(this));\\n\\n if (_token == address(0)) {\\n Address.sendValue(payable(msg.sender), balance);\\n } else {\\n IERC20(_token).transfer(msg.sender, balance);\\n }\\n\\n emit FundsDeducted(_token, balance, balance);\\n }\\n\\n // ============ External Functions ============\\n\\n /**\\n * @notice Wraps the call to execute() on Connext and pays either the caller or hardcoded relayer from this\\n * contract's balance for completing the transaction.\\n *\\n * @param _args - ExecuteArgs arguments.\\n * @param _fee - Fee to be paid to relayer.\\n * @return transferId - The transfer ID of the crosschain transfer. Should match the xcall's transfer ID in order for\\n * reconciliation to occur.\\n */\\n function execute(\\n ExecuteArgs calldata _args,\\n uint256 _fee\\n ) external onlyRelayer nonReentrant returns (bytes32 transferId) {\\n transferId = connext.execute(_args);\\n transferRelayerFee(_fee);\\n }\\n\\n /**\\n * @notice Wraps the call to proveAndProcess() on SpokeConnector and pays either the caller or hardcoded relayer\\n * from this contract's balance for completing the transaction.\\n *\\n * @param _proofs Batch of Proofs containing messages for proving/processing.\\n * @param _aggregateRoot The target aggregate root we want to prove inclusion for. This root must have\\n * already been delivered to this spoke connector contract and surpassed the validation period.\\n * @param _aggregatePath Merkle path of inclusion for the inbound root.\\n * @param _aggregateIndex Index of the inbound root in the aggregator's merkle tree in the hub.\\n * @param _fee - Fee to be paid to relayer.\\n */\\n function proveAndProcess(\\n ISpokeConnector.Proof[] calldata _proofs,\\n bytes32 _aggregateRoot,\\n bytes32[32] calldata _aggregatePath,\\n uint256 _aggregateIndex,\\n uint256 _fee\\n ) external onlyRelayer nonReentrant {\\n spokeConnector.proveAndProcess(_proofs, _aggregateRoot, _aggregatePath, _aggregateIndex);\\n transferRelayerFee(_fee);\\n }\\n\\n /**\\n * @notice Wraps the call to send() on SpokeConnector and pays either the caller or hardcoded relayer from this\\n * contract's balance for completing the transaction.\\n *\\n * @param _encodedData - Data to be sent to Connext SpokeConnector\\n * @param _messageFee - Fee to be paid to the SpokeConnector for connected AMBs that require fees.\\n * @param _relayerFee - Fee to be paid to relayer.\\n */\\n function send(bytes memory _encodedData, uint256 _messageFee, uint256 _relayerFee) external onlyRelayer nonReentrant {\\n spokeConnector.send{value: _messageFee}(_encodedData);\\n emit FundsDeducted(address(0), _messageFee, address(this).balance);\\n transferRelayerFee(_relayerFee);\\n }\\n\\n /**\\n * @notice Wraps the call to proposeAggregateRoot() on SpokeConnector and pays either the caller or hardcoded relayer\\n * @dev _rootTimestamp is required for off-chain agents to be able to know which root they should fetch from the root manager contract\\n * in order to compare it with the one being proposed. The off-chain agents should also ensure the proposed root is\\n * not an old one.\\n * @param _aggregateRoot The aggregate root to propose.\\n * @param _rootTimestamp Block.timestamp at which the root was finalized in the root manager contract.\\n * @param _signature Signature from the approved proposer.\\n * @param _fee - Fee to be paid to relayer.\\n */\\n function proposeAggregateRoot(\\n bytes32 _aggregateRoot,\\n uint256 _rootTimestamp,\\n bytes memory _signature,\\n uint256 _fee\\n ) external onlyRelayer onlyProposeCooledDown nonReentrant {\\n // Validate the signer\\n _validateProposeSignature(_aggregateRoot, _rootTimestamp, lastProposeAggregateRootAt, _signature);\\n\\n spokeConnector.proposeAggregateRoot(_aggregateRoot, _rootTimestamp);\\n\\n transferRelayerFee(_fee);\\n }\\n\\n /**\\n * @notice Wraps the `finalize` function on root manager\\n * @param _proposedAggregateRoot The aggregate root currently proposed\\n * @param _rootTimestamp Block.timestamp at which the root was finalized in the root manager contract.\\n * @param _endOfDispute The block in which the dispute period for proposed root finalizes\\n */\\n function finalize(\\n bytes32 _proposedAggregateRoot,\\n uint256 _rootTimestamp,\\n uint256 _endOfDispute\\n ) external onlyFinalizeCooledDown nonReentrant {\\n // Finalized the proposed aggregate root\\n spokeConnector.finalize(_proposedAggregateRoot, _rootTimestamp, _endOfDispute);\\n }\\n\\n receive() external payable {\\n emit FundsReceived(msg.value, address(this).balance);\\n }\\n\\n // ============ Internal Functions ============\\n\\n /**\\n * @notice helper function to transfer fees to either Gelato relayer via Fee Collector or to our\\n * backup relayer (msg.sender).\\n *\\n * @param _fee - Fee to be paid to relayer.\\n */\\n function transferRelayerFee(uint256 _fee) internal {\\n if (_fee == 0) {\\n return;\\n }\\n if (msg.sender == gelatoRelayer) {\\n Address.sendValue(payable(feeCollector), _fee);\\n } else {\\n Address.sendValue(payable(msg.sender), _fee);\\n }\\n emit FundsDeducted(address(0), _fee, address(this).balance);\\n }\\n\\n function _addRelayer(address _relayer) internal {\\n if (allowedRelayer[_relayer]) {\\n revert RelayerProxy__addRelayer_relayerAdded();\\n }\\n\\n allowedRelayer[_relayer] = true;\\n emit RelayerAdded(_relayer);\\n }\\n\\n function _removeRelayer(address _relayer) internal {\\n if (!allowedRelayer[_relayer]) {\\n revert RelayerProxy__removeRelayer_relayerNotAdded();\\n }\\n\\n allowedRelayer[_relayer] = false;\\n emit RelayerRemoved(_relayer);\\n }\\n\\n function _setConnext(address _connext) internal {\\n emit ConnextChanged(_connext, address(connext));\\n connext = IConnext(_connext);\\n }\\n\\n function _setSpokeConnector(address _spokeConnector) internal {\\n emit SpokeConnectorChanged(_spokeConnector, address(spokeConnector));\\n spokeConnector = ISpokeConnector(_spokeConnector);\\n }\\n\\n function _setGelatoRelayer(address _gelatoRelayer) internal {\\n emit GelatoRelayerChanged(_gelatoRelayer, address(gelatoRelayer));\\n gelatoRelayer = _gelatoRelayer;\\n }\\n\\n function _setFeeCollector(address _feeCollector) internal {\\n emit FeeCollectorChanged(_feeCollector, address(feeCollector));\\n feeCollector = _feeCollector;\\n }\\n\\n function _setKeep3r(address _keep3r) internal {\\n emit Keep3rChanged(_keep3r, address(keep3r));\\n keep3r = IKeep3rV2(_keep3r);\\n }\\n\\n function _validateProposeSignature(\\n bytes32 _aggregateRoot,\\n uint256 _rootTimestamp,\\n uint256 _lastProposeAggregateRootAt,\\n bytes memory _signature\\n ) internal view {\\n // Get the payload\\n // To prevent signature replay, added `lastProposeAggregateRootAt` and `domain`.\\n // `lastProposeAggregateRootAt` will be strictly increased after proposed, so same signature can't be used again.\\n // Also domain will prevent the replay from other chains.\\n bytes32 payload = keccak256(abi.encodePacked(_aggregateRoot, _rootTimestamp, _lastProposeAggregateRootAt, domain));\\n // Recover signer\\n address signer = payload.toEthSignedMessageHash().recover(_signature);\\n if (!spokeConnector.allowlistedProposers(signer)) {\\n revert RelayerProxy__validateProposeSignature_notProposer(signer);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x490c99f38a8d231e3f26b78d9669d50d8bb9e9d7374d3e3bbe10d460c957dbe5\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/helpers/RelayerProxyHub.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\nimport {ECDSA} from \\\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\\\";\\nimport {ReentrancyGuard} from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport {GelatoRelayFeeCollector} from \\\"@gelatonetwork/relay-context/contracts/GelatoRelayFeeCollector.sol\\\";\\n\\nimport {ChainIDs} from \\\"../libraries/ChainIDs.sol\\\";\\nimport {Types} from \\\"../../../messaging/connectors/optimism/lib/Types.sol\\\";\\nimport {ProposedOwnable} from \\\"../../../shared/ProposedOwnable.sol\\\";\\nimport {RootManager} from \\\"../../../messaging/RootManager.sol\\\";\\n\\nimport {RelayerProxy} from \\\"./RelayerProxy.sol\\\";\\n\\ninterface IRootManager {\\n function lastPropagatedRoot(uint32 _domain) external view returns (bytes32);\\n\\n function propagate(\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData\\n ) external payable;\\n\\n function dequeue() external returns (bytes32, uint256);\\n\\n function proposeAggregateRoot(\\n uint256 _snapshotId,\\n bytes32 _aggregateRoot,\\n bytes32[] calldata _snapshotsRoots,\\n uint32[] calldata _domains\\n ) external;\\n\\n function allowlistedProposers(address _proposer) external view returns (bool);\\n\\n function finalizeAndPropagate(\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData,\\n bytes32 _proposedAggregateRoot,\\n uint256 _endOfDispute\\n ) external payable;\\n\\n function finalize(bytes32 _proposedAggregateRoot, uint256 _endOfDispute) external payable;\\n\\n function sendRootToHubSpoke() external;\\n}\\n\\ninterface IGnosisHubConnector {\\n struct GnosisRootMessageData {\\n bytes _data;\\n bytes _signatures;\\n }\\n\\n function executeSignatures(bytes memory _data, bytes memory _signatures) external;\\n}\\n\\ninterface IArbitrumHubConnector {\\n struct L2Message {\\n address l2Sender;\\n address to;\\n uint256 l2Block;\\n uint256 l1Block;\\n uint256 l2Timestamp;\\n uint256 value;\\n bytes callData;\\n }\\n\\n struct ArbitrumRootMessageData {\\n uint64 _nodeNum;\\n bytes32 _sendRoot;\\n bytes32 _blockHash;\\n bytes32[] _proof;\\n uint256 _index;\\n L2Message _message;\\n }\\n\\n function processMessageFromRoot(\\n uint64 _nodeNum,\\n bytes32 _sendRoot,\\n bytes32 _blockHash,\\n bytes32[] calldata _proof,\\n uint256 _index,\\n L2Message calldata _message\\n ) external;\\n}\\n\\ninterface IOptimismHubConnector {\\n struct OptimismRootMessageData {\\n Types.WithdrawalTransaction _tx;\\n uint256 _l2OutputIndex;\\n Types.OutputRootProof _outputRootProof;\\n bytes[] _withdrawalProof;\\n }\\n\\n /**\\n * @dev modified from: OptimismPortal contract\\n * https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/contracts/L1/OptimismPortal.sol#L208\\n */\\n function processMessageFromRoot(\\n Types.WithdrawalTransaction memory _tx,\\n uint256 _l2OutputIndex,\\n Types.OutputRootProof calldata _outputRootProof,\\n bytes[] calldata _withdrawalProof\\n ) external;\\n}\\n\\ninterface IPolygonHubConnector {\\n function receiveMessage(bytes memory inputData) external;\\n}\\n\\ninterface IZkSyncHubConnector {\\n struct ZkSyncRootMessageData {\\n uint32 _l2BlockNumber;\\n uint256 _l2MessageIndex;\\n uint16 _l2TxNumberInBlock;\\n bytes _message;\\n bytes32[] _proof;\\n }\\n\\n function processMessageFromRoot(\\n // zkSync block number in which the message was sent\\n uint32 _l2BlockNumber,\\n // Message index, that can be received via API\\n uint256 _l2MessageIndex,\\n // The L2 transaction number in a block, in which the log was sent\\n uint16 _l2TxNumberInBlock,\\n // The message that was sent from l2\\n bytes calldata _message,\\n // Merkle proof for the message\\n bytes32[] calldata _proof\\n ) external;\\n}\\n\\n/**\\n * @title RelayerProxyHub\\n * @author Connext Labs, Inc.\\n * @notice This is a temporary contract that wraps the Connext RootManager's propagate() function so that it can be called by\\n * Gelato's legacy relayer network. The contract stores native assets and pays them to the relayer on function call.\\n */\\ncontract RelayerProxyHub is RelayerProxy {\\n using ECDSA for bytes32;\\n // ============ Properties ============\\n\\n /**\\n * @notice Address of the RootManager contract\\n */\\n IRootManager public rootManager;\\n\\n /**\\n * @notice Delay for the propagate function\\n */\\n uint256 public propagateCooldown;\\n\\n /**\\n * @notice Timestamp of the last time the propagate job was worked.\\n */\\n uint256 public lastPropagateAt;\\n\\n /**\\n * @notice Address of Autonolas keeper contract\\n * @dev Special consideration for Autonolas keeper\\n */\\n address public autonolas;\\n\\n /**\\n * @notice Enum of Autonolas functions with different priorities\\n */\\n enum AutonolasPriorityFunction {\\n Propagate,\\n ProcessFromRoot,\\n ProposeAggregateRoot,\\n FinalizeAndPropagate\\n }\\n\\n /**\\n * @notice Mapping of Autonolas priority function to priority number\\n * @dev number between 0 and 10 to determine priority that Autonolas has for jobs.\\n * 0 is disabled, 10 will work for every block.\\n */\\n mapping(AutonolasPriorityFunction => uint8) public autonolasPriority;\\n\\n /**\\n * @notice Mapping of identifier to root message hash to boolean indicating if the message has been processed\\n */\\n mapping(uint32 => mapping(bytes32 => bool)) public processedRootMessages;\\n\\n /**\\n * @notice Mapping of identifier to hub connector contract address\\n */\\n mapping(uint32 => address) public hubConnectors;\\n\\n // ============ Events ============\\n\\n /**\\n * @notice Emitted when the root manager is updated by admin\\n * @param rootManager New root manager address in the contract\\n * @param oldRootManager Old root manager address in the contract\\n */\\n event RootManagerChanged(address rootManager, address oldRootManager);\\n\\n /**\\n * @notice Emitted when the cooldown period for propagate is updated\\n * @param propagateCooldown New cooldown period\\n * @param oldPropagateCooldown Old cooldown period\\n */\\n event PropagateCooldownChanged(uint256 propagateCooldown, uint256 oldPropagateCooldown);\\n\\n /**\\n * @notice Emitted when a new hub connector is updated\\n * @param hubConnector New hub connector address\\n * @param oldHubConnector Old hub connector address\\n * @param chain Chain ID of the hub connector\\n */\\n event HubConnectorChanged(address hubConnector, address oldHubConnector, uint32 chain);\\n\\n /**\\n * @notice Emitted when Autonolas address is updated by admin\\n * @param updated New Autonolas address in the contract\\n * @param previous Old Autonolas address in the contract\\n */\\n event AutonolasChanged(address updated, address previous);\\n\\n /**\\n * @notice Emitted when Autonolas priority is updated by admin\\n * @param updated New Autonolas priority in the contract\\n * @param previous Old Autonolas priority in the contract\\n */\\n event AutonolasPriorityChanged(AutonolasPriorityFunction fn, uint8 updated, uint8 previous);\\n\\n // ============ Errors ============\\n error RelayerProxyHub__propagateCooledDown_notCooledDown();\\n error RelayerProxyHub__validateProposeSignature_notProposer(address signer);\\n error RelayerProxyHub__processFromRoot_alreadyProcessed();\\n error RelayerProxyHub__processFromRoot_noHubConnector();\\n error RelayerProxyHub__processFromRoot_unsupportedChain();\\n\\n // ============ Modifiers ============\\n /**\\n * @notice Indicates if the job is workable by the sender. Takes into account the Autonolas priority.\\n * For example, if priority is 3, then sender will not be able to work on blocks 0, 1, 2, unless they are Autonolas.\\n * Priority 0 disables Autonolas priority completely.\\n * @param _sender The address of the caller\\n */\\n modifier isWorkableBySender(AutonolasPriorityFunction _function, address _sender) {\\n if (\\n _sender != autonolas && autonolasPriority[_function] != 0 && block.number % 10 <= autonolasPriority[_function] - 1\\n ) {\\n revert RelayerProxy__isWorkableBySender_notWorkable();\\n }\\n _;\\n }\\n\\n modifier onlyPropagateCooledDown() {\\n if (block.timestamp < lastPropagateAt + propagateCooldown) {\\n revert RelayerProxyHub__propagateCooledDown_notCooledDown();\\n }\\n _;\\n lastPropagateAt = block.timestamp;\\n }\\n\\n // ============ Structs ============\\n\\n /**\\n * Struct containing the construstor arguments of a RelayerProxyHub\\n * @param connext The address of the Connext on this domain.\\n * @param spokeConnector The address of the SpokeConnector on this domain.\\n * @param gelatoRelayer The address of the Gelato relayer on this domain.\\n * @param feeCollector The address of the Gelato Fee Collector on this domain.\\n * @param keep3r The address of the Keep3r on this domain.\\n * @param rootManager The address of the Root Manager on this domain.\\n * @param autonolas The address of the Autonolas keeper contract on this domain.\\n * @param propagateCooldown The delay for the propagate function.\\n * @param finalizeCooldown The delay for the finalize function.\\n * @param proposeAggregateRootCooldown The delay for the proposeAggregateRoot function.\\n * @param hubConnectors The addresses of the hub connectors on this domain.\\n * @param hubConnectorChains The identifiers of the hub connectors on this domain.\\n */\\n struct HubConstructorParams {\\n address connext;\\n address spokeConnector;\\n address gelatoRelayer;\\n address feeCollector;\\n address keep3r;\\n address rootManager;\\n address autonolas;\\n uint256 propagateCooldown;\\n uint256 finalizeCooldown;\\n uint256 proposeAggregateRootCooldown;\\n address[] hubConnectors;\\n uint32[] hubConnectorChains;\\n }\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Creates a new RelayerProxyHub instance.\\n */\\n constructor(\\n HubConstructorParams memory _params\\n )\\n RelayerProxy(\\n ConstructorParams(\\n _params.connext,\\n _params.spokeConnector,\\n _params.gelatoRelayer,\\n _params.feeCollector,\\n _params.keep3r,\\n _params.proposeAggregateRootCooldown,\\n _params.finalizeCooldown\\n )\\n )\\n {\\n _setRootManager(_params.rootManager);\\n _setPropagateCooldown(_params.propagateCooldown);\\n _setProposeAggregateRootCooldown(_params.proposeAggregateRootCooldown);\\n _setAutonolas(_params.autonolas);\\n for (uint256 i = 0; i < _params.hubConnectors.length; i++) {\\n _setHubConnector(_params.hubConnectors[i], _params.hubConnectorChains[i]);\\n }\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Updates the RootManager address.\\n * @param _rootManager The address of the new RootManager on this domain.\\n */\\n function setRootManager(address _rootManager) external onlyOwner definedAddress(_rootManager) {\\n _setRootManager(_rootManager);\\n }\\n\\n /**\\n * @notice Updates the propagate cooldown.\\n * @param _propagateCooldown The new cooldown in seconds.\\n */\\n function setPropagateCooldown(uint256 _propagateCooldown) external onlyOwner {\\n _setPropagateCooldown(_propagateCooldown);\\n }\\n\\n /**\\n * @notice Updates the HubConnector address.\\n * @param _hubConnector The address of the new HubConnector on this domain.\\n */\\n function setHubConnector(address _hubConnector, uint32 _chain) external onlyOwner definedAddress(_hubConnector) {\\n _setHubConnector(_hubConnector, _chain);\\n }\\n\\n /**\\n * @notice Updates the Autonolas contract address on this contract.\\n * @param _autonolas - New Autonolas contract address.\\n */\\n function setAutonolas(address _autonolas) external onlyOwner definedAddress(_autonolas) {\\n _setAutonolas(_autonolas);\\n }\\n\\n /**\\n * @notice Updates the Autonolas priority on this contract.\\n * @param _autonolasPriority - New Autonolas priority.\\n */\\n function setAutonolasPriority(AutonolasPriorityFunction _function, uint8 _autonolasPriority) external onlyOwner {\\n _setAutonolasPriority(_function, _autonolasPriority);\\n }\\n\\n // ============ External Functions ============\\n\\n /**\\n * @notice Checks if the RootManager has a workable root. Calls the rootManager's dequeue() function to check if the\\n * RootManager has a sendable root. This is an expensive function so it should only be called off-chain to determine\\n * if the relayer should call the propagate() function.\\n *\\n * @return True if the RootManager has a workable root.\\n */\\n function propagateWorkable(uint32[] memory domains) public returns (bool) {\\n (bytes32 _aggregateRoot, ) = rootManager.dequeue();\\n bool updatedRoot = false;\\n for (uint256 i; i < domains.length; i++) {\\n updatedRoot = rootManager.lastPropagatedRoot(domains[i]) != _aggregateRoot;\\n if (updatedRoot) {\\n break;\\n }\\n }\\n return updatedRoot && block.timestamp >= lastPropagateAt + propagateCooldown;\\n }\\n\\n /**\\n * @notice Wraps the call to propagate() on RootManager and pays either the caller or hardcoded relayer\\n * from this contract's balance for completing the transaction.\\n *\\n * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n * used here to reduce gas costs, and keep them static regardless of number of supported domains.\\n * @param _messageFees Array of fees in native token for an AMB if required\\n * @param _encodedData Array of encodedData: extra params for each AMB if required\\n * @param _relayerFee Fee to be paid to relayer\\n */\\n function propagate(\\n address[] calldata _connectors,\\n uint256[] calldata _messageFees,\\n bytes[] memory _encodedData,\\n uint256 _relayerFee\\n ) external onlyRelayer onlyPropagateCooledDown nonReentrant {\\n uint256 sum = _propagate(_connectors, _messageFees, _encodedData);\\n emit FundsDeducted(address(0), sum, address(this).balance);\\n transferRelayerFee(_relayerFee);\\n }\\n\\n /**\\n * @notice Wraps the call to propagate() on RootManager and pays with Keep3r credits. Only allowed to be called\\n * by registered Keep3r.\\n *\\n * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n * used here to reduce gas costs, and keep them static regardless of number of supported domains.\\n * @param _messageFees Array of fees in native token for an AMB if required\\n * @param _encodedData Array of encodedData: extra params for each AMB if required\\n */\\n function propagateKeep3r(\\n address[] calldata _connectors,\\n uint256[] calldata _messageFees,\\n bytes[] memory _encodedData\\n )\\n external\\n isWorkableBySender(AutonolasPriorityFunction.Propagate, msg.sender)\\n validateAndPayWithCredits(msg.sender)\\n onlyPropagateCooledDown\\n nonReentrant\\n {\\n _propagate(_connectors, _messageFees, _encodedData);\\n }\\n\\n /**\\n * Wraps the call to processFromRoot() on RootManager. Only allowed to be called by registered relayer.\\n *\\n * @param _encodedData Array of encoded data for HubConnector function.\\n * @param _fromChain Chain ID of the chain the message is coming from.\\n * @param _l2Hash Hash of the message on the L2 chain.\\n */\\n function processFromRoot(\\n bytes calldata _encodedData,\\n uint32 _fromChain,\\n bytes32 _l2Hash\\n ) external onlyRelayer nonReentrant {\\n _processFromRoot(_encodedData, _fromChain, _l2Hash);\\n }\\n\\n /**\\n * Wraps the call to processFromRoot() on RootManager and pays with Keep3r credits. Only allowed to be called\\n * by registered Keep3r.\\n *\\n * @param _encodedData Array of encoded data for HubConnector function.\\n * @param _fromChain Chain ID of the chain the message is coming from.\\n * @param _l2Hash Hash of the message on the L2 chain.\\n */\\n function processFromRootKeep3r(\\n bytes calldata _encodedData,\\n uint32 _fromChain,\\n bytes32 _l2Hash\\n )\\n external\\n isWorkableBySender(AutonolasPriorityFunction.ProcessFromRoot, msg.sender)\\n validateAndPayWithCredits(msg.sender)\\n {\\n _processFromRoot(_encodedData, _fromChain, _l2Hash);\\n }\\n\\n /**\\n * @notice Wraps the `proposeAggregateRoot` function of RootManager\\n * @dev This contract will validate the signer is a whitelisted proposer on the RootManager,\\n * and then call `propose` itself. This means this contract must *also* be whitelisted as a\\n * proposer on the RootManager.\\n * @param _snapshotId The snapshot id of the root to be proposed.\\n * @param _aggregateRoot The aggregate root to be proposed.\\n * @param _snapshotsRoots The roots of the connectors included in the aggregate.\\n * @param _domains The domains of the snapshots to be proposed.\\n */\\n function proposeAggregateRootOnRootKeep3r(\\n uint256 _snapshotId,\\n bytes32 _aggregateRoot,\\n bytes32[] calldata _snapshotsRoots,\\n uint32[] calldata _domains,\\n bytes memory _signature\\n )\\n external\\n isWorkableBySender(AutonolasPriorityFunction.ProposeAggregateRoot, msg.sender)\\n validateAndPayWithCredits(msg.sender)\\n onlyProposeCooledDown\\n {\\n // Validate the signer\\n _validateProposeSignature(_snapshotId, _aggregateRoot, lastProposeAggregateRootAt, _signature);\\n\\n // Propose the aggregate\\n rootManager.proposeAggregateRoot(_snapshotId, _aggregateRoot, _snapshotsRoots, _domains);\\n }\\n\\n /**\\n * @notice Wraps the `proposeAggregateRoot` function of RootManager\\n * @dev This contract will validate the signer is a whitelisted proposer on the RootManager,\\n * and then call `propose` itself. This means this contract must *also* be whitelisted as a\\n * proposer on the RootManager.\\n * @param _snapshotId The snapshot id of the root to be proposed.\\n * @param _aggregateRoot The aggregate root to be proposed.\\n * @param _snapshotsRoots The roots of the connectors included in the aggregate.\\n * @param _domains The domains of the snapshots to be proposed.\\n * @param _signature Signature from the approved proposer.\\n */\\n function proposeAggregateRootOnRoot(\\n uint256 _snapshotId,\\n bytes32 _aggregateRoot,\\n bytes32[] calldata _snapshotsRoots,\\n uint32[] calldata _domains,\\n bytes memory _signature\\n ) external onlyRelayer onlyProposeCooledDown nonReentrant {\\n // Validate the signer\\n _validateProposeSignature(_snapshotId, _aggregateRoot, lastProposeAggregateRootAt, _signature);\\n\\n // Propose the aggregate root\\n rootManager.proposeAggregateRoot(_snapshotId, _aggregateRoot, _snapshotsRoots, _domains);\\n }\\n\\n /**\\n * @notice Wraps the `finalizeAndPropagate` function\\n * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n * @param _fees Array of fees in native token for an AMB if required\\n * @param _encodedData Array of encodedData: extra params for each AMB if required\\n * @param _proposedAggregateRoot The aggregate root to be proposed.\\n * @param _endOfDispute The timestamp when the dispute period ends.\\n */\\n function finalizeAndPropagate(\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData,\\n bytes32 _proposedAggregateRoot,\\n uint256 _endOfDispute\\n ) external onlyRelayer onlyPropagateCooledDown nonReentrant returns (uint256 _fee) {\\n // Finalized the proposed aggregate root\\n _fee = _finalizeAndPropagate(_connectors, _fees, _encodedData, _proposedAggregateRoot, _endOfDispute);\\n }\\n\\n /**\\n * @notice Wraps the `finalize` function on root manager\\n * @param _proposedAggregateRoot The aggregate root currently proposed\\n * @param _endOfDispute The block in which the dispute period for proposed root finalizes\\n */\\n function finalizeOnRoot(\\n bytes32 _proposedAggregateRoot,\\n uint256 _endOfDispute\\n ) external onlyFinalizeCooledDown nonReentrant {\\n // Finalized the proposed aggregate root\\n rootManager.finalize(_proposedAggregateRoot, _endOfDispute);\\n }\\n\\n /**\\n * @notice Wraps the `finalizeAndPropagate` function\\n * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n * @param _fees Array of fees in native token for an AMB if required\\n * @param _encodedData Array of encodedData: extra params for each AMB if required\\n * @param _proposedAggregateRoot The aggregate root to be proposed.\\n * @param _endOfDispute The timestamp when the dispute period ends.\\n */\\n function finalizeAndPropagateKeep3r(\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData,\\n bytes32 _proposedAggregateRoot,\\n uint256 _endOfDispute\\n )\\n external\\n isWorkableBySender(AutonolasPriorityFunction.Propagate, msg.sender)\\n validateAndPayWithCredits(msg.sender)\\n onlyPropagateCooledDown\\n nonReentrant\\n returns (uint256 _fee)\\n {\\n _fee = _finalizeAndPropagate(_connectors, _fees, _encodedData, _proposedAggregateRoot, _endOfDispute);\\n }\\n\\n /**\\n * @notice Wraps the `sendRootToHubSpoke` function of RootManager\\n */\\n function sendRootToHubSpoke() external {\\n // Send aggregate root to MainnetSpokeConnector\\n rootManager.sendRootToHubSpoke();\\n }\\n\\n // ============ Internal Functions ============\\n function _setRootManager(address _rootManager) internal {\\n emit RootManagerChanged(_rootManager, address(rootManager));\\n rootManager = IRootManager(_rootManager);\\n }\\n\\n function _setPropagateCooldown(uint256 _propagateCooldown) internal {\\n emit PropagateCooldownChanged(_propagateCooldown, propagateCooldown);\\n propagateCooldown = _propagateCooldown;\\n }\\n\\n function _setHubConnector(address _hubConnector, uint32 chain) internal {\\n emit HubConnectorChanged(_hubConnector, hubConnectors[chain], chain);\\n hubConnectors[chain] = _hubConnector;\\n }\\n\\n function _setAutonolas(address _autonolas) internal {\\n emit AutonolasChanged(_autonolas, autonolas);\\n autonolas = _autonolas;\\n }\\n\\n function _setAutonolasPriority(AutonolasPriorityFunction _function, uint8 _autonolasPriority) internal {\\n emit AutonolasPriorityChanged(_function, _autonolasPriority, autonolasPriority[_function]);\\n autonolasPriority[_function] = _autonolasPriority;\\n }\\n\\n function _validateProposeSignature(\\n uint256 _snapshotId,\\n bytes32 _aggregateRoot,\\n uint256 _lastProposeAggregateRootAt,\\n bytes memory _signature\\n ) internal view {\\n // Get the payload\\n // To prevent signature replay, added `snapshotId`, `lastProposeAggregateRootAt` and `domain`.\\n // `lastProposeAggregateRootAt` will be strictly increased after proposed, so same signature can't be used again.\\n // Also domain will prevent the replay from other chains.\\n bytes32 payload = keccak256(abi.encodePacked(_snapshotId, _aggregateRoot, _lastProposeAggregateRootAt, domain));\\n // Recover signer\\n address signer = payload.toEthSignedMessageHash().recover(_signature);\\n if (!rootManager.allowlistedProposers(signer)) {\\n revert RelayerProxyHub__validateProposeSignature_notProposer(signer);\\n }\\n }\\n\\n /**\\n * @notice Calls propagate function on RootManager.\\n */\\n function _propagate(\\n address[] calldata _connectors,\\n uint256[] calldata _messageFees,\\n bytes[] memory _encodedData\\n ) internal returns (uint256) {\\n uint256 sum = 0;\\n uint256 length = _connectors.length;\\n for (uint32 i; i < length; ) {\\n sum += _messageFees[i];\\n unchecked {\\n ++i;\\n }\\n }\\n\\n rootManager.propagate{value: sum}(_connectors, _messageFees, _encodedData);\\n return sum;\\n }\\n\\n function _finalizeAndPropagate(\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData,\\n bytes32 _proposedAggregateRoot,\\n uint256 _endOfDispute\\n ) internal returns (uint256) {\\n uint256 sum = 0;\\n uint256 length = _connectors.length;\\n for (uint32 i; i < length; ) {\\n sum += _fees[i];\\n unchecked {\\n ++i;\\n }\\n }\\n\\n rootManager.finalizeAndPropagate{value: sum}(\\n _connectors,\\n _fees,\\n _encodedData,\\n _proposedAggregateRoot,\\n _endOfDispute\\n );\\n return sum;\\n }\\n\\n /**\\n * @notice Calls processFromRoot function on RootManager.\\n * Decodes the encodedData and calls the appropriate HubConnector function.\\n */\\n function _processFromRoot(bytes calldata encodedData, uint32 fromChain, bytes32 l2Hash) internal {\\n if (processedRootMessages[fromChain][l2Hash]) {\\n revert RelayerProxyHub__processFromRoot_alreadyProcessed();\\n }\\n if (hubConnectors[fromChain] == address(0)) {\\n revert RelayerProxyHub__processFromRoot_noHubConnector();\\n }\\n\\n processedRootMessages[fromChain][l2Hash] = true;\\n\\n if (fromChain == ChainIDs.GNOSIS || fromChain == ChainIDs.GNOSIS_CHIADO) {\\n IGnosisHubConnector.GnosisRootMessageData memory data = abi.decode(\\n encodedData,\\n (IGnosisHubConnector.GnosisRootMessageData)\\n );\\n IGnosisHubConnector(hubConnectors[fromChain]).executeSignatures(data._data, data._signatures);\\n } else if (fromChain == ChainIDs.ARBITRUM_ONE || fromChain == ChainIDs.ARBITRUM_GOERLI) {\\n IArbitrumHubConnector.ArbitrumRootMessageData memory data = abi.decode(\\n encodedData,\\n (IArbitrumHubConnector.ArbitrumRootMessageData)\\n );\\n IArbitrumHubConnector(hubConnectors[fromChain]).processMessageFromRoot(\\n data._nodeNum,\\n data._sendRoot,\\n data._blockHash,\\n data._proof,\\n data._index,\\n data._message\\n );\\n } else if (fromChain == ChainIDs.OPTIMISM || fromChain == ChainIDs.OPTIMISM_GOERLI) {\\n IOptimismHubConnector.OptimismRootMessageData memory data = abi.decode(\\n encodedData,\\n (IOptimismHubConnector.OptimismRootMessageData)\\n );\\n IOptimismHubConnector(hubConnectors[fromChain]).processMessageFromRoot(\\n data._tx,\\n data._l2OutputIndex,\\n data._outputRootProof,\\n data._withdrawalProof\\n );\\n } else if (fromChain == ChainIDs.ZKSYNC || fromChain == ChainIDs.ZKSYNC_TEST) {\\n IZkSyncHubConnector.ZkSyncRootMessageData memory data = abi.decode(\\n encodedData,\\n (IZkSyncHubConnector.ZkSyncRootMessageData)\\n );\\n IZkSyncHubConnector(hubConnectors[fromChain]).processMessageFromRoot(\\n data._l2BlockNumber,\\n data._l2MessageIndex,\\n data._l2TxNumberInBlock,\\n data._message,\\n data._proof\\n );\\n } else if (fromChain == ChainIDs.POLYGON_POS || fromChain == ChainIDs.MUMBAI) {\\n IPolygonHubConnector(hubConnectors[fromChain]).receiveMessage(encodedData);\\n } else {\\n revert RelayerProxyHub__processFromRoot_unsupportedChain();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x794e94e71d4413e54fb1cb725f171361da9e7bda4e6278170a794eabc6025a9d\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/interfaces/IConnext.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {ExecuteArgs, TransferInfo, DestinationTransferStatus} from \\\"../libraries/LibConnextStorage.sol\\\";\\nimport {LibDiamond} from \\\"../libraries/LibDiamond.sol\\\";\\nimport {SwapUtils} from \\\"../libraries/SwapUtils.sol\\\";\\nimport {TokenId} from \\\"../libraries/TokenId.sol\\\";\\n\\nimport {IStableSwap} from \\\"./IStableSwap.sol\\\";\\n\\nimport {IDiamondCut} from \\\"./IDiamondCut.sol\\\";\\nimport {IDiamondLoupe} from \\\"./IDiamondLoupe.sol\\\";\\n\\ninterface IConnext is IDiamondLoupe, IDiamondCut {\\n // TokenFacet\\n function canonicalToAdopted(bytes32 _key) external view returns (address);\\n\\n function canonicalToAdopted(TokenId calldata _canonical) external view returns (address);\\n\\n function adoptedToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n function canonicalToRepresentation(bytes32 _key) external view returns (address);\\n\\n function canonicalToRepresentation(TokenId calldata _canonical) external view returns (address);\\n\\n function representationToCanonical(address _adopted) external view returns (TokenId memory);\\n\\n function getLocalAndAdoptedToken(bytes32 _id, uint32 _domain) external view returns (address, address);\\n\\n function approvedAssets(bytes32 _key) external view returns (bool);\\n\\n function approvedAssets(TokenId calldata _canonical) external view returns (bool);\\n\\n function adoptedToLocalExternalPools(bytes32 _key) external view returns (IStableSwap);\\n\\n function adoptedToLocalExternalPools(TokenId calldata _canonical) external view returns (IStableSwap);\\n\\n function getTokenId(address _candidate) external view returns (TokenId memory);\\n\\n function getCustodiedAmount(bytes32 _key) external view returns (uint256);\\n\\n function setupAsset(\\n TokenId calldata _canonical,\\n uint8 _canonicalDecimals,\\n string memory _representationName,\\n string memory _representationSymbol,\\n address _adoptedAssetId,\\n address _stableSwapPool,\\n uint256 _cap\\n ) external returns (address);\\n\\n function setupAssetWithDeployedRepresentation(\\n TokenId calldata _canonical,\\n address _representation,\\n address _adoptedAssetId,\\n address _stableSwapPool\\n ) external returns (address);\\n\\n function addStableSwapPool(TokenId calldata _canonical, address _stableSwapPool) external;\\n\\n function updateLiquidityCap(TokenId calldata _canonical, uint256 _updated) external;\\n\\n function removeAssetId(\\n bytes32 _key,\\n address _adoptedAssetId,\\n address _representation\\n ) external;\\n\\n function removeAssetId(\\n TokenId calldata _canonical,\\n address _adoptedAssetId,\\n address _representation\\n ) external;\\n\\n function updateDetails(\\n TokenId calldata _canonical,\\n string memory _name,\\n string memory _symbol\\n ) external;\\n\\n // BaseConnextFacet\\n\\n // BridgeFacet\\n function routedTransfers(bytes32 _transferId) external view returns (address[] memory);\\n\\n function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);\\n\\n function remote(uint32 _domain) external view returns (address);\\n\\n function domain() external view returns (uint256);\\n\\n function nonce() external view returns (uint256);\\n\\n function approvedSequencers(address _sequencer) external view returns (bool);\\n\\n function xAppConnectionManager() external view returns (address);\\n\\n function addConnextion(uint32 _domain, address _connext) external;\\n\\n function addSequencer(address _sequencer) external;\\n\\n function removeSequencer(address _sequencer) external;\\n\\n function xcall(\\n uint32 _destination,\\n address _to,\\n address _asset,\\n address _delegate,\\n uint256 _amount,\\n uint256 _slippage,\\n bytes calldata _callData\\n ) external payable returns (bytes32);\\n\\n function xcallIntoLocal(\\n uint32 _destination,\\n address _to,\\n address _asset,\\n address _delegate,\\n uint256 _amount,\\n uint256 _slippage,\\n bytes calldata _callData\\n ) external payable returns (bytes32);\\n\\n function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);\\n\\n function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;\\n\\n function forceReceiveLocal(TransferInfo calldata _params) external;\\n\\n function bumpTransfer(bytes32 _transferId) external payable;\\n\\n function setXAppConnectionManager(address _xAppConnectionManager) external;\\n\\n function enrollRemoteRouter(uint32 _domain, bytes32 _router) external;\\n\\n function enrollCustom(\\n uint32 _domain,\\n bytes32 _id,\\n address _custom\\n ) external;\\n\\n // InboxFacet\\n\\n function handle(\\n uint32 _origin,\\n uint32 _nonce,\\n bytes32 _sender,\\n bytes memory _message\\n ) external;\\n\\n // ProposedOwnableFacet\\n\\n function owner() external view returns (address);\\n\\n function routerAllowlistRemoved() external view returns (bool);\\n\\n function proposed() external view returns (address);\\n\\n function proposedTimestamp() external view returns (uint256);\\n\\n function routerAllowlistTimestamp() external view returns (uint256);\\n\\n function delay() external view returns (uint256);\\n\\n function paused() external view returns (bool);\\n\\n function proposeRouterAllowlistRemoval() external;\\n\\n function removeRouterAllowlist() external;\\n\\n function proposeNewOwner(address newlyProposed) external;\\n\\n function acceptProposedOwner() external;\\n\\n function pause() external;\\n\\n function unpause() external;\\n\\n // RelayerFacet\\n function approvedRelayers(address _relayer) external view returns (bool);\\n\\n function relayerFeeVault() external view returns (address);\\n\\n function setRelayerFeeVault(address _relayerFeeVault) external;\\n\\n function addRelayer(address _relayer) external;\\n\\n function removeRelayer(address _relayer) external;\\n\\n // RoutersFacet\\n function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);\\n\\n function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);\\n\\n function getRouterApproval(address _router) external view returns (bool);\\n\\n function getRouterRecipient(address _router) external view returns (address);\\n\\n function getRouterOwner(address _router) external view returns (address);\\n\\n function getProposedRouterOwner(address _router) external view returns (address);\\n\\n function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);\\n\\n function maxRoutersPerTransfer() external view returns (uint256);\\n\\n function routerBalances(address _router, address _asset) external view returns (uint256);\\n\\n function getRouterApprovalForPortal(address _router) external view returns (bool);\\n\\n function approveRouter(address _router) external;\\n\\n function initializeRouter(address _owner, address _recipient) external;\\n\\n function unapproveRouter(address _router) external;\\n\\n function setMaxRoutersPerTransfer(uint256 _newMaxRouters) external;\\n\\n function setLiquidityFeeNumerator(uint256 _numerator) external;\\n\\n function approveRouterForPortal(address _router) external;\\n\\n function unapproveRouterForPortal(address _router) external;\\n\\n function setRouterRecipient(address _router, address _recipient) external;\\n\\n function proposeRouterOwner(address _router, address _proposed) external;\\n\\n function acceptProposedRouterOwner(address _router) external;\\n\\n function addRouterLiquidityFor(\\n uint256 _amount,\\n address _local,\\n address _router\\n ) external payable;\\n\\n function addRouterLiquidity(uint256 _amount, address _local) external payable;\\n\\n function removeRouterLiquidityFor(\\n TokenId memory _canonical,\\n uint256 _amount,\\n address payable _to,\\n address _router\\n ) external;\\n\\n function removeRouterLiquidity(\\n TokenId memory _canonical,\\n uint256 _amount,\\n address payable _to\\n ) external;\\n\\n // PortalFacet\\n function getAavePortalDebt(bytes32 _transferId) external view returns (uint256);\\n\\n function getAavePortalFeeDebt(bytes32 _transferId) external view returns (uint256);\\n\\n function aavePool() external view returns (address);\\n\\n function aavePortalFee() external view returns (uint256);\\n\\n function setAavePool(address _aavePool) external;\\n\\n function setAavePortalFee(uint256 _aavePortalFeeNumerator) external;\\n\\n function repayAavePortal(\\n TransferInfo calldata _params,\\n uint256 _backingAmount,\\n uint256 _feeAmount,\\n uint256 _maxIn\\n ) external;\\n\\n function repayAavePortalFor(\\n TransferInfo calldata _params,\\n uint256 _backingAmount,\\n uint256 _feeAmount\\n ) external;\\n\\n // StableSwapFacet\\n function getSwapStorage(bytes32 canonicalId) external view returns (SwapUtils.Swap memory);\\n\\n function getSwapLPToken(bytes32 canonicalId) external view returns (address);\\n\\n function getSwapA(bytes32 canonicalId) external view returns (uint256);\\n\\n function getSwapAPrecise(bytes32 canonicalId) external view returns (uint256);\\n\\n function getSwapToken(bytes32 canonicalId, uint8 index) external view returns (IERC20);\\n\\n function getSwapTokenIndex(bytes32 canonicalId, address tokenAddress) external view returns (uint8);\\n\\n function getSwapTokenBalance(bytes32 canonicalId, uint8 index) external view returns (uint256);\\n\\n function getSwapVirtualPrice(bytes32 canonicalId) external view returns (uint256);\\n\\n function calculateSwap(\\n bytes32 canonicalId,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapTokenAmount(\\n bytes32 canonicalId,\\n uint256[] calldata amounts,\\n bool deposit\\n ) external view returns (uint256);\\n\\n function calculateRemoveSwapLiquidity(bytes32 canonicalId, uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveSwapLiquidityOneToken(\\n bytes32 canonicalId,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) external view returns (uint256);\\n\\n function getSwapAdminBalance(bytes32 canonicalId, uint256 index) external view returns (uint256);\\n\\n function swap(\\n bytes32 canonicalId,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n bytes32 canonicalId,\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n bytes32 canonicalId,\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function addSwapLiquidity(\\n bytes32 canonicalId,\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeSwapLiquidity(\\n bytes32 canonicalId,\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeSwapLiquidityOneToken(\\n bytes32 canonicalId,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeSwapLiquidityImbalance(\\n bytes32 canonicalId,\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n // SwapAdminFacet\\n\\n function initializeSwap(\\n bytes32 _canonicalId,\\n IERC20[] memory _pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 _a,\\n uint256 _fee,\\n uint256 _adminFee\\n ) external;\\n\\n function withdrawSwapAdminFees(bytes32 canonicalId) external;\\n\\n function setSwapAdminFee(bytes32 canonicalId, uint256 newAdminFee) external;\\n\\n function setSwapFee(bytes32 canonicalId, uint256 newSwapFee) external;\\n\\n function rampA(\\n bytes32 canonicalId,\\n uint256 futureA,\\n uint256 futureTime\\n ) external;\\n\\n function stopRampA(bytes32 canonicalId) external;\\n\\n function lpTokenTargetAddress() external view returns (address);\\n\\n function updateLpTokenTarget(address newAddress) external;\\n}\\n\",\"keccak256\":\"0x9af3b8c8daeee5ac3d431b8a1631e6e9aad600424a1932b2bced2e24866c699b\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/interfaces/IDiamondCut.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\ninterface IDiamondCut {\\n enum FacetCutAction {\\n Add,\\n Replace,\\n Remove\\n }\\n // Add=0, Replace=1, Remove=2\\n\\n struct FacetCut {\\n address facetAddress;\\n FacetCutAction action;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function proposeDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCutProposed(FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n /// @notice Add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function diamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n /// @notice Propose to add/replace/remove any number of functions and optionally execute\\n /// a function with delegatecall\\n /// @param _diamondCut Contains the facet addresses and function selectors\\n /// @param _init The address of the contract or facet to execute _calldata\\n /// @param _calldata A function call, including function selector and arguments\\n /// _calldata is executed with delegatecall on _init\\n function rescindDiamondCut(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external;\\n\\n /**\\n * @notice Returns the acceptance time for a given proposal\\n * @param _diamondCut Contains the facet addresses and function selectors\\n * @param _init The address of the contract or facet to execute _calldata\\n * @param _calldata A function call, including function selector and arguments _calldata is\\n * executed with delegatecall on _init\\n */\\n function getAcceptanceTime(\\n FacetCut[] calldata _diamondCut,\\n address _init,\\n bytes calldata _calldata\\n ) external returns (uint256);\\n\\n event DiamondCutRescinded(FacetCut[] _diamondCut, address _init, bytes _calldata);\\n}\\n\",\"keccak256\":\"0x4f0bf252cb5541d7ffd04fc49abdc7d2f2c838ba65f108201f787851c7b238fb\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IDiamondLoupe.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\n\\n// A loupe is a small magnifying glass used to look at diamonds.\\n// These functions look at diamonds\\ninterface IDiamondLoupe {\\n /// These functions are expected to be called frequently\\n /// by tools.\\n\\n struct Facet {\\n address facetAddress;\\n bytes4[] functionSelectors;\\n }\\n\\n /// @notice Gets all facet addresses and their four byte function selectors.\\n /// @return facets_ Facet\\n function facets() external view returns (Facet[] memory facets_);\\n\\n /// @notice Gets all the function selectors supported by a specific facet.\\n /// @param _facet The facet address.\\n /// @return facetFunctionSelectors_\\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\\n\\n /// @notice Get all the facet addresses used by a diamond.\\n /// @return facetAddresses_\\n function facetAddresses() external view returns (address[] memory facetAddresses_);\\n\\n /// @notice Gets the facet that supports the given selector.\\n /// @dev If facet is not found return address(0).\\n /// @param _functionSelector The function selector.\\n /// @return facetAddress_ The facet address.\\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\\n}\\n\",\"keccak256\":\"0xc408c13dc42d9526b1f292bad3f3915efa15c2133f509d90a45422b5f6cf829c\",\"license\":\"MIT\"},\"contracts/core/connext/interfaces/IStableSwap.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IERC20} from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\ninterface IStableSwap {\\n /*** EVENTS ***/\\n\\n // events replicated from SwapUtils to make the ABI easier for dumb\\n // clients\\n event TokenSwap(address indexed buyer, uint256 tokensSold, uint256 tokensBought, uint128 soldId, uint128 boughtId);\\n event AddLiquidity(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(uint256 newAdminFee);\\n event NewSwapFee(uint256 newSwapFee);\\n event NewWithdrawFee(uint256 newWithdrawFee);\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n function swap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function swapExact(\\n uint256 amountIn,\\n address assetIn,\\n address assetOut,\\n uint256 minAmountOut,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function swapExactOut(\\n uint256 amountOut,\\n address assetIn,\\n address assetOut,\\n uint256 maxAmountIn,\\n uint256 deadline\\n ) external payable returns (uint256);\\n\\n function getA() external view returns (uint256);\\n\\n function getToken(uint8 index) external view returns (IERC20);\\n\\n function getTokenIndex(address tokenAddress) external view returns (uint8);\\n\\n function getTokenBalance(uint8 index) external view returns (uint256);\\n\\n function getVirtualPrice() external view returns (uint256);\\n\\n // min return calculation functions\\n function calculateSwap(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) external view returns (uint256);\\n\\n function calculateSwapOut(\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) external view returns (uint256);\\n\\n function calculateSwapFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountIn\\n ) external view returns (uint256);\\n\\n function calculateSwapOutFromAddress(\\n address assetIn,\\n address assetOut,\\n uint256 amountOut\\n ) external view returns (uint256);\\n\\n function calculateTokenAmount(uint256[] calldata amounts, bool deposit) external view returns (uint256);\\n\\n function calculateRemoveLiquidity(uint256 amount) external view returns (uint256[] memory);\\n\\n function calculateRemoveLiquidityOneToken(uint256 tokenAmount, uint8 tokenIndex)\\n external\\n view\\n returns (uint256 availableTokenAmount);\\n\\n // state modifying functions\\n function initialize(\\n IERC20[] memory pooledTokens,\\n uint8[] memory decimals,\\n string memory lpTokenName,\\n string memory lpTokenSymbol,\\n uint256 a,\\n uint256 fee,\\n uint256 adminFee,\\n address lpTokenTargetAddress\\n ) external;\\n\\n function addLiquidity(\\n uint256[] calldata amounts,\\n uint256 minToMint,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidity(\\n uint256 amount,\\n uint256[] calldata minAmounts,\\n uint256 deadline\\n ) external returns (uint256[] memory);\\n\\n function removeLiquidityOneToken(\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n\\n function removeLiquidityImbalance(\\n uint256[] calldata amounts,\\n uint256 maxBurnAmount,\\n uint256 deadline\\n ) external returns (uint256);\\n}\\n\",\"keccak256\":\"0xc58596b5187e67d0d983d44aa5a98901a6a66fc770f157b556f99e243ed6d2d6\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AmplificationUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title AmplificationUtils library\\n * @notice A library to calculate and ramp the A parameter of a given `SwapUtils.Swap` struct.\\n * This library assumes the struct is fully validated.\\n */\\nlibrary AmplificationUtils {\\n event RampA(uint256 oldA, uint256 newA, uint256 initialTime, uint256 futureTime);\\n event StopRampA(uint256 currentA, uint256 time);\\n\\n /**\\n * @notice Return A, the amplification coefficient * n ** (n - 1)\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter\\n */\\n function getA(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self) / Constants.A_PRECISION;\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return A parameter in its raw precision form\\n */\\n function getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256) {\\n return _getAPrecise(self);\\n }\\n\\n /**\\n * @notice Return A in its raw precision\\n * @dev See the StableSwap paper for details\\n * @param self Swap struct to read from\\n * @return currentA A parameter in its raw precision form\\n */\\n function _getAPrecise(SwapUtils.Swap storage self) internal view returns (uint256 currentA) {\\n uint256 t1 = self.futureATime; // time when ramp is finished\\n currentA = self.futureA; // final A value when ramp is finished\\n uint256 a0 = self.initialA; // initial A value when ramp is started\\n\\n if (a0 != currentA && block.timestamp < t1) {\\n uint256 t0 = self.initialATime; // time when ramp is started\\n assembly {\\n currentA := div(add(mul(a0, sub(t1, timestamp())), mul(currentA, sub(timestamp(), t0))), sub(t1, t0))\\n }\\n }\\n }\\n\\n /**\\n * @notice Start ramping up or down A parameter towards given futureA_ and futureTime_\\n * Checks if the change is too rapid, and commits the new A value only when it falls under\\n * the limit range.\\n * @param self Swap struct to update\\n * @param futureA_ the new A to ramp towards\\n * @param futureTime_ timestamp when the new A should be reached\\n */\\n function rampA(\\n SwapUtils.Swap storage self,\\n uint256 futureA_,\\n uint256 futureTime_\\n ) internal {\\n require(block.timestamp >= self.initialATime + Constants.MIN_RAMP_DELAY, \\\"Wait 1 day before starting ramp\\\");\\n require(futureTime_ >= block.timestamp + Constants.MIN_RAMP_TIME, \\\"Insufficient ramp time\\\");\\n require(futureA_ != 0 && futureA_ < Constants.MAX_A, \\\"futureA_ must be > 0 and < MAX_A\\\");\\n\\n uint256 initialAPrecise = _getAPrecise(self);\\n uint256 futureAPrecise = futureA_ * Constants.A_PRECISION;\\n require(initialAPrecise != futureAPrecise, \\\"!valid ramp\\\");\\n\\n if (futureAPrecise < initialAPrecise) {\\n require(futureAPrecise * Constants.MAX_A_CHANGE >= initialAPrecise, \\\"futureA_ is too small\\\");\\n } else {\\n require(futureAPrecise <= initialAPrecise * Constants.MAX_A_CHANGE, \\\"futureA_ is too large\\\");\\n }\\n\\n self.initialA = initialAPrecise;\\n self.futureA = futureAPrecise;\\n self.initialATime = block.timestamp;\\n self.futureATime = futureTime_;\\n\\n emit RampA(initialAPrecise, futureAPrecise, block.timestamp, futureTime_);\\n }\\n\\n /**\\n * @notice Stops ramping A immediately. Once this function is called, rampA()\\n * cannot be called for another 24 hours\\n * @param self Swap struct to update\\n */\\n function stopRampA(SwapUtils.Swap storage self) internal {\\n require(self.futureATime > block.timestamp, \\\"Ramp is already stopped\\\");\\n\\n uint256 currentA = _getAPrecise(self);\\n self.initialA = currentA;\\n self.futureA = currentA;\\n self.initialATime = block.timestamp;\\n self.futureATime = block.timestamp;\\n\\n emit StopRampA(currentA, block.timestamp);\\n }\\n}\\n\",\"keccak256\":\"0x617ae0d3ae92d6b0b5fb6e3357bcd37e6ab67f02bfde9c3f97d428ee9f777f59\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/AssetLogic.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\\\";\\n\\nimport {TypeCasts} from \\\"../../../shared/libraries/TypeCasts.sol\\\";\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\n\\nimport {LibConnextStorage, AppStorage, TokenConfig} from \\\"./LibConnextStorage.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\nlibrary AssetLogic {\\n // ============ Libraries ============\\n\\n using SwapUtils for SwapUtils.Swap;\\n using SafeERC20 for IERC20Metadata;\\n\\n // ============ Errors ============\\n\\n error AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n error AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n error AssetLogic__handleOutgoingAsset_notNative();\\n error AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n error AssetLogic__getConfig_notRegistered();\\n error AssetLogic__swapAsset_externalStableSwapPoolDoesNotExist();\\n\\n // ============ Internal: Handle Transfer ============\\n\\n function getConfig(bytes32 _key) internal view returns (TokenConfig storage) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n TokenConfig storage config = s.tokenConfigs[_key];\\n\\n // Sanity check: not empty\\n // NOTE: adopted decimals will *always* be nonzero (or reflect what is onchain\\n // for the asset). The same is not true for the representation assets, which\\n // will always have 0 decimals on the canonical domain\\n if (config.adoptedDecimals < 1) {\\n revert AssetLogic__getConfig_notRegistered();\\n }\\n\\n return config;\\n }\\n\\n /**\\n * @notice Handles transferring funds from msg.sender to the Connext contract.\\n * @dev Does NOT work with fee-on-transfer tokens: will revert.\\n *\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _amount - The specified amount to transfer.\\n */\\n function handleIncomingAsset(address _asset, uint256 _amount) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) {\\n revert AssetLogic__handleIncomingAsset_nativeAssetNotSupported();\\n }\\n\\n IERC20Metadata asset = IERC20Metadata(_asset);\\n\\n // Record starting amount to validate correct amount is transferred.\\n uint256 starting = asset.balanceOf(address(this));\\n\\n // Transfer asset to contract.\\n asset.safeTransferFrom(msg.sender, address(this), _amount);\\n\\n // Ensure correct amount was transferred (i.e. this was not a fee-on-transfer token).\\n if (asset.balanceOf(address(this)) - starting != _amount) {\\n revert AssetLogic__handleIncomingAsset_feeOnTransferNotSupported();\\n }\\n }\\n\\n /**\\n * @notice Handles transferring funds from the Connext contract to a specified address\\n * @param _asset - The address of the ERC20 token to transfer.\\n * @param _to - The recipient address that will receive the funds.\\n * @param _amount - The amount to withdraw from contract.\\n */\\n function handleOutgoingAsset(\\n address _asset,\\n address _to,\\n uint256 _amount\\n ) internal {\\n // Sanity check: if amount is 0, do nothing.\\n if (_amount == 0) {\\n return;\\n }\\n // Sanity check: asset address is not zero.\\n if (_asset == address(0)) revert AssetLogic__handleOutgoingAsset_notNative();\\n\\n // Transfer ERC20 asset to target recipient.\\n SafeERC20.safeTransfer(IERC20Metadata(_asset), _to, _amount);\\n }\\n\\n // ============ Internal: StableSwap Pools ============\\n\\n /**\\n * @notice Return the index of the given token address. Reverts if no matching\\n * token is found.\\n * @param key the hash of the canonical id and domain\\n * @param tokenAddress address of the token\\n * @return the index of the given token address\\n */\\n function getTokenIndexFromStableSwapPool(bytes32 key, address tokenAddress) internal view returns (uint8) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n uint8 index = s.tokenIndexes[key][tokenAddress];\\n if (address(s.swapStorages[key].pooledTokens[index]) != tokenAddress)\\n revert AssetLogic__getTokenIndexFromStableSwapPool_notExist();\\n return index;\\n }\\n\\n // ============ Internal: Handle Swap ============\\n\\n /**\\n * @notice Swaps an adopted asset to the local (representation or canonical) asset.\\n * @dev Will not swap if the asset passed in is the local asset.\\n * @param _key - The hash of canonical id and domain.\\n * @param _asset - The address of the adopted asset to swap into the local asset.\\n * @param _amount - The amount of the adopted asset to swap.\\n * @param _slippage - The maximum amount of slippage user will take on from _amount in BPS.\\n * @return uint256 The amount of local asset received from swap.\\n */\\n function swapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount,\\n uint256 _slippage\\n ) internal returns (uint256) {\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return 0;\\n }\\n\\n // Check the case where the adopted asset *is* the local asset. If so, no need to swap.\\n if (_local == _asset) {\\n return _amount;\\n }\\n\\n // Get the configs.\\n TokenConfig storage config = getConfig(_key);\\n\\n // Swap the asset to the proper local asset.\\n (uint256 out, ) = _swapAsset(\\n _key,\\n _asset,\\n _local,\\n _amount,\\n calculateSlippageBoundary(config.adoptedDecimals, config.representationDecimals, _amount, _slippage)\\n );\\n return out;\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _slippage - The minimum amount of slippage user will take on from _amount in BPS\\n * @param _normalizedIn - The amount sent in on xcall to take the slippage from, in 18 decimals\\n * by convention\\n * @return The amount of adopted asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _slippage,\\n uint256 _normalizedIn\\n ) internal returns (uint256, address) {\\n // Get the token config.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n\\n // If the adopted asset is the local asset, no need to swap.\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n // If there's no amount, no need to swap.\\n if (_amount == 0) {\\n return (_amount, adopted);\\n }\\n\\n // Swap the asset to the proper local asset\\n return\\n _swapAsset(\\n _key,\\n _asset,\\n adopted,\\n _amount,\\n // NOTE: To get the slippage boundary here, you must take the slippage % off of the\\n // normalized amount in (at 18 decimals by convention), then convert that amount\\n // to the proper decimals of adopted.\\n calculateSlippageBoundary(\\n Constants.DEFAULT_NORMALIZED_DECIMALS,\\n config.adoptedDecimals,\\n _normalizedIn,\\n _slippage\\n )\\n );\\n }\\n\\n /**\\n * @notice Swaps a local bridge asset for the adopted asset using the stored stable swap\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key the hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the adopted asset\\n * @param _amount - The exact amount to receive out of the swap\\n * @param _maxIn - The most you will supply to the swap\\n * @return The amount of local asset put into swap\\n * @return The address of asset received post-swap\\n */\\n function swapFromLocalAssetIfNeededForExactOut(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n TokenConfig storage config = getConfig(_key);\\n\\n // If the adopted asset is the local asset, no need to swap.\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n return _swapAssetOut(_key, _asset, adopted, _amount, _maxIn);\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @dev Will not swap if the asset passed in is the adopted asset\\n * @param _key - The hash of canonical id and domain.\\n * @param _assetIn - The address of the from asset\\n * @param _assetOut - The address of the to asset\\n * @param _amount - The amount of the local asset to swap\\n * @param _minOut - The minimum amount of `_assetOut` the user will accept\\n * @return The amount of asset received\\n * @return The address of asset received\\n */\\n function _swapAsset(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amount,\\n uint256 _minOut\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternal(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amount,\\n _minOut\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(address(pool), 0);\\n assetIn.safeIncreaseAllowance(address(pool), _amount);\\n\\n // NOTE: If pool is not registered here, then this call will revert.\\n return (\\n pool.swapExact(_amount, _assetIn, _assetOut, _minOut, block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION),\\n _assetOut\\n );\\n }\\n }\\n\\n /**\\n * @notice Swaps assetIn to assetOut using the stored stable swap or internal swap pool.\\n * @param _key - The hash of the canonical id and domain.\\n * @param _assetIn - The address of the from asset.\\n * @param _assetOut - The address of the to asset.\\n * @param _amountOut - The amount of the _assetOut to swap.\\n * @param _maxIn - The most you will supply to the swap.\\n * @return amountIn The amount of assetIn. Will be 0 if the swap was unsuccessful (slippage\\n * too high).\\n * @return assetOut The address of asset received.\\n */\\n function _swapAssetOut(\\n bytes32 _key,\\n address _assetIn,\\n address _assetOut,\\n uint256 _amountOut,\\n uint256 _maxIn\\n ) internal returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // Retrieve internal swap pool reference. If it doesn't exist, we'll resort to using an\\n // external stableswap below.\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Swap the asset to the proper local asset.\\n // NOTE: IFF slippage was too high to perform swap in either case: success = false, amountIn = 0\\n if (ipool.exists()) {\\n // Swap via the internal pool.\\n return (\\n ipool.swapInternalOut(\\n getTokenIndexFromStableSwapPool(_key, _assetIn),\\n getTokenIndexFromStableSwapPool(_key, _assetOut),\\n _amountOut,\\n _maxIn\\n ),\\n _assetOut\\n );\\n } else {\\n // Otherwise, swap via external stableswap pool.\\n // NOTE: This call will revert if the external stableswap pool doesn't exist.\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n address poolAddress = address(pool);\\n\\n // Perform the swap.\\n // Edge case with some tokens: Example USDT in ETH Mainnet, after the backUnbacked call\\n // there could be a remaining allowance if not the whole amount is pulled by aave.\\n // Later, if we try to increase the allowance it will fail. USDT demands if allowance\\n // is not 0, it has to be set to 0 first.\\n // Example: https://github.com/aave/aave-v3-periphery/blob/ca184e5278bcbc10d28c3dbbc604041d7cfac50b/contracts/adapters/paraswap/ParaSwapRepayAdapter.sol#L138-L140\\n IERC20Metadata assetIn = IERC20Metadata(_assetIn);\\n\\n assetIn.safeApprove(poolAddress, 0);\\n assetIn.safeIncreaseAllowance(poolAddress, _maxIn);\\n\\n uint256 out = pool.swapExactOut(\\n _amountOut,\\n _assetIn,\\n _assetOut,\\n _maxIn,\\n block.timestamp + Constants.DEFAULT_DEADLINE_EXTENSION\\n );\\n\\n // Reset allowance\\n assetIn.safeApprove(poolAddress, 0);\\n return (out, _assetOut);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive on a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _key - The hash of the canonical id and domain\\n * @param _asset - The address of the local asset to swap into the local asset\\n * @param _amount - The amount of the local asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapFromLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the adopted asset is the local asset, no need to swap.\\n TokenConfig storage config = getConfig(_key);\\n address adopted = config.adopted;\\n if (adopted == _asset) {\\n return (_amount, adopted);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // Calculate with internal swap pool.\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, adopted);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), adopted);\\n } else {\\n // Otherwise, try to calculate with external pool.\\n IStableSwap pool = IStableSwap(config.adoptedToLocalExternalPools);\\n // NOTE: This call will revert if no external pool exists.\\n return (pool.calculateSwapFromAddress(_asset, adopted, _amount), adopted);\\n }\\n }\\n\\n /**\\n * @notice Calculate amount of tokens you receive of a local bridge asset for the adopted asset\\n * using the stored stable swap\\n * @dev Will not use the stored stable swap if the asset passed in is the local asset\\n * @param _asset - The address of the asset to swap into the local asset\\n * @param _amount - The amount of the asset to swap\\n * @return The amount of local asset received from swap\\n * @return The address of asset received post-swap\\n */\\n function calculateSwapToLocalAssetIfNeeded(\\n bytes32 _key,\\n address _asset,\\n address _local,\\n uint256 _amount\\n ) internal view returns (uint256, address) {\\n AppStorage storage s = LibConnextStorage.connextStorage();\\n\\n // If the asset is the local asset, no swap needed\\n if (_asset == _local) {\\n return (_amount, _local);\\n }\\n\\n SwapUtils.Swap storage ipool = s.swapStorages[_key];\\n\\n // Calculate the swap using the appropriate pool.\\n if (ipool.exists()) {\\n // if internal swap pool exists\\n uint8 tokenIndexIn = getTokenIndexFromStableSwapPool(_key, _asset);\\n uint8 tokenIndexOut = getTokenIndexFromStableSwapPool(_key, _local);\\n return (ipool.calculateSwap(tokenIndexIn, tokenIndexOut, _amount), _local);\\n } else {\\n IStableSwap pool = IStableSwap(getConfig(_key).adoptedToLocalExternalPools);\\n\\n return (pool.calculateSwapFromAddress(_asset, _local, _amount), _local);\\n }\\n }\\n\\n // ============ Internal: Token ID Helpers ============\\n\\n /**\\n * @notice Gets the canonical information for a given candidate.\\n * @dev First checks the `address(0)` convention, then checks if the asset given is the\\n * adopted asset, then calculates the local address.\\n * @return TokenId The canonical token ID information for the given candidate.\\n */\\n function getCanonicalTokenId(address _candidate, AppStorage storage s) internal view returns (TokenId memory) {\\n TokenId memory _canonical;\\n // If candidate is address(0), return an empty `_canonical`.\\n if (_candidate == address(0)) {\\n return _canonical;\\n }\\n\\n // Check to see if candidate is an adopted asset.\\n _canonical = s.adoptedToCanonical[_candidate];\\n if (_canonical.domain != 0) {\\n // Candidate is an adopted asset, return canonical info.\\n return _canonical;\\n }\\n\\n // Candidate was not adopted; it could be the local address.\\n // IFF this domain is the canonical domain, then the local == canonical.\\n // Otherwise, it will be the representation asset.\\n if (isLocalOrigin(_candidate, s)) {\\n // The token originates on this domain, canonical information is the information\\n // of the candidate\\n _canonical.domain = s.domain;\\n _canonical.id = TypeCasts.addressToBytes32(_candidate);\\n } else {\\n // on a remote domain, return the representation\\n _canonical = s.representationToCanonical[_candidate];\\n }\\n return _canonical;\\n }\\n\\n /**\\n * @notice Determine if token is of local origin (i.e. it is a locally originating contract,\\n * and NOT a token deployed by the bridge).\\n * @param s AppStorage instance.\\n * @return bool true if token is locally originating, false otherwise.\\n */\\n function isLocalOrigin(address _token, AppStorage storage s) internal view returns (bool) {\\n // If the token contract WAS deployed by the bridge, it will be stored in this mapping.\\n // If so, the token is NOT of local origin.\\n if (s.representationToCanonical[_token].domain != 0) {\\n return false;\\n }\\n // If the contract was NOT deployed by the bridge, but the contract does exist, then it\\n // IS of local origin. Returns true if code exists at `_addr`.\\n return _token.code.length != 0;\\n }\\n\\n /**\\n * @notice Get the local asset address for a given canonical key, id, and domain.\\n * @param _key - The hash of canonical id and domain.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @param s AppStorage instance.\\n * @return address of the the local asset.\\n */\\n function getLocalAsset(\\n bytes32 _key,\\n bytes32 _id,\\n uint32 _domain,\\n AppStorage storage s\\n ) internal view returns (address) {\\n if (_domain == s.domain) {\\n // Token is of local origin\\n return TypeCasts.bytes32ToAddress(_id);\\n } else {\\n // Token is a representation of a token of remote origin\\n return getConfig(_key).representation;\\n }\\n }\\n\\n /**\\n * @notice Calculates the hash of canonical ID and domain.\\n * @dev This hash is used as the key for many asset-related mappings.\\n * @param _id Canonical ID.\\n * @param _domain Canonical domain.\\n * @return bytes32 Canonical hash, used as key for accessing token info from mappings.\\n */\\n function calculateCanonicalHash(bytes32 _id, uint32 _domain) internal pure returns (bytes32) {\\n return keccak256(abi.encode(_id, _domain));\\n }\\n\\n // ============ Internal: Math ============\\n\\n /**\\n * @notice This function calculates slippage as a %age of the amount in, and normalizes\\n * That to the `_out` decimals.\\n *\\n * @dev This *ONLY* works for 1:1 assets\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amountIn The starting amount for the swap\\n * @param _slippage The slippage allowed for the swap, in BPS\\n * @return uint256 The minimum amount out for the swap\\n */\\n function calculateSlippageBoundary(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amountIn,\\n uint256 _slippage\\n ) internal pure returns (uint256) {\\n if (_amountIn == 0) {\\n return 0;\\n }\\n // Get the min recieved (in same decimals as _amountIn)\\n uint256 min = (_amountIn * (Constants.BPS_FEE_DENOMINATOR - _slippage)) / Constants.BPS_FEE_DENOMINATOR;\\n return normalizeDecimals(_in, _out, min);\\n }\\n\\n /**\\n * @notice This function translates the _amount in _in decimals\\n * to _out decimals\\n *\\n * @param _in The decimals of the asset in / amount in\\n * @param _out The decimals of the target asset\\n * @param _amount The value to normalize to the `_out` decimals\\n * @return uint256 Normalized decimals.\\n */\\n function normalizeDecimals(\\n uint8 _in,\\n uint8 _out,\\n uint256 _amount\\n ) internal pure returns (uint256) {\\n if (_in == _out) {\\n return _amount;\\n }\\n // Convert this value to the same decimals as _out\\n uint256 normalized;\\n if (_in < _out) {\\n normalized = _amount * (10**(_out - _in));\\n } else {\\n normalized = _amount / (10**(_in - _out));\\n }\\n return normalized;\\n }\\n}\\n\",\"keccak256\":\"0x11b201d50d6c6ccf411a879fc9f95491bcc21da9607d5aad78df95192e937316\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/ChainIDs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary ChainIDs {\\n uint32 public constant MAINNET = 1;\\n uint32 public constant GOERLI = 5;\\n uint32 public constant OPTIMISM = 10;\\n uint32 public constant BNB = 56;\\n uint32 public constant GNOSIS = 100;\\n uint32 public constant POLYGON_POS = 137;\\n uint32 public constant ZKSYNC_TEST = 280;\\n uint32 public constant ZKSYNC = 324;\\n uint32 public constant OPTIMISM_GOERLI = 420;\\n uint32 public constant POLYGON_ZKEVM = 1101;\\n uint32 public constant POLYGON_ZKEVM_TEST = 1442;\\n uint32 public constant GNOSIS_CHIADO = 10200;\\n uint32 public constant ARBITRUM_ONE = 42161;\\n uint32 public constant LINEA_TEST = 59140;\\n uint32 public constant LINEA = 59144;\\n uint32 public constant MUMBAI = 80001;\\n uint32 public constant ARBITRUM_GOERLI = 421613;\\n}\\n\",\"keccak256\":\"0x5a824f1c2614593e451ef0b2fa1211a17d3aad33b807d9b7d19c595a58a8a667\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/Constants.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary Constants {\\n // ============= Initial Values =============\\n\\n /**\\n * @notice Sets the initial lp fee at 5 bps\\n */\\n uint256 public constant INITIAL_LIQUIDITY_FEE_NUMERATOR = 9_995;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint256 public constant INITIAL_MAX_ROUTERS = 5;\\n\\n /**\\n * @notice Sets the initial max routers per transfer\\n */\\n uint16 public constant INITIAL_AAVE_REFERRAL_CODE = 0;\\n\\n // =============\\n\\n // ============= Unchangeable Values =============\\n // ============= Facets\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant NOT_ENTERED = 1;\\n\\n /**\\n * @notice Reentrancy modifier for diamond\\n */\\n uint256 internal constant ENTERED = 2;\\n\\n /**\\n * @notice Contains hash of empty bytes\\n */\\n bytes32 internal constant EMPTY_HASH = keccak256(\\\"\\\");\\n\\n /**\\n * @notice Denominator for BPS values\\n */\\n uint256 public constant BPS_FEE_DENOMINATOR = 10_000;\\n\\n /**\\n * @notice Value for delay used on governance\\n */\\n uint256 public constant GOVERNANCE_DELAY = 7 days;\\n\\n /**\\n * @notice Required gas amount to be leftover after passing in `gasleft` when\\n * executing calldata (see `_executeCalldata` method).\\n */\\n uint256 public constant EXECUTE_CALLDATA_RESERVE_GAS = 10_000;\\n\\n /**\\n * @notice Portal referral code\\n */\\n uint16 public constant AAVE_REFERRAL_CODE = 0;\\n\\n // ============= ConnextPriceOracle\\n /**\\n * @notice Valid period for a price delivered by the price oracle\\n */\\n uint256 public constant ORACLE_VALID_PERIOD = 1 minutes;\\n\\n /**\\n * @notice Valid wiggle room for future timestamps (3s) used by `setDirectPrice`\\n */\\n uint256 public constant FUTURE_TIME_BUFFER = 3;\\n\\n /**\\n * @notice Defalt decimals values are normalized to\\n */\\n uint8 public constant DEFAULT_NORMALIZED_DECIMALS = uint8(18);\\n\\n /**\\n * @notice Bytes of return data copied back when using `excessivelySafeCall`\\n */\\n uint16 public constant DEFAULT_COPY_BYTES = 256;\\n\\n /**\\n * @notice Valid deadline extension used when swapping (1hr)\\n */\\n uint256 public constant DEFAULT_DEADLINE_EXTENSION = 3600;\\n\\n // ============= Swaps\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n *\\n * The minimum in a pool is 2 (nextUSDC, USDC), and the maximum allowed is 16. While\\n * we do not have pools supporting this number of token, allowing a larger value leaves\\n * the possibility open to pool multiple stable local/adopted pairs, garnering greater\\n * capital efficiency. 16 specifically was chosen as a bit of a sweet spot between the\\n * default of 32 and what we will realistically host in pools.\\n */\\n uint256 public constant MINIMUM_POOLED_TOKENS = 2;\\n uint256 public constant MAXIMUM_POOLED_TOKENS = 16;\\n\\n /**\\n * @notice the precision all pools tokens will be converted to\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint8 public constant POOL_PRECISION_DECIMALS = 18;\\n\\n /**\\n * @notice the denominator used to calculate admin and LP fees. For example, an\\n * LP fee might be something like tradeAmount.mul(fee).div(FEE_DENOMINATOR)\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant FEE_DENOMINATOR = 1e10;\\n\\n /**\\n * @notice Max swap fee is 1% or 100bps of each swap\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_SWAP_FEE = 1e8;\\n\\n /**\\n * @notice Max adminFee is 100% of the swapFee. adminFee does not add additional fee on top of swapFee.\\n * Instead it takes a certain % of the swapFee. Therefore it has no impact on the\\n * users but only on the earnings of LPs\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_ADMIN_FEE = 1e10;\\n\\n /**\\n * @notice constant value used as max loop limit\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant MAX_LOOP_LIMIT = 256;\\n\\n // Constant value used as max delay time for removing swap after disabled\\n uint256 internal constant REMOVE_DELAY = 7 days;\\n\\n /**\\n * @notice constant values used in ramping A calculations\\n * @dev stored here to keep easily in sync between `SwapUtils` and `SwapUtilsExternal`\\n */\\n uint256 public constant A_PRECISION = 100;\\n uint256 public constant MAX_A = 10**6;\\n uint256 public constant MAX_A_CHANGE = 2;\\n uint256 public constant MIN_RAMP_TIME = 14 days;\\n uint256 public constant MIN_RAMP_DELAY = 1 days;\\n}\\n\",\"keccak256\":\"0x2c4d18cad8bb4e24f57619884e66fed2b44f78c4cf87e296ed34e4cb7fc399f0\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/core/connext/libraries/LibConnextStorage.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IStableSwap} from \\\"../interfaces/IStableSwap.sol\\\";\\nimport {IConnectorManager} from \\\"../../../messaging/interfaces/IConnectorManager.sol\\\";\\nimport {SwapUtils} from \\\"./SwapUtils.sol\\\";\\nimport {TokenId} from \\\"./TokenId.sol\\\";\\n\\n/**\\n * @notice THIS FILE DEFINES OUR STORAGE LAYOUT AND ID GENERATION SCHEMA. IT CAN ONLY BE MODIFIED FREELY FOR FRESH\\n * DEPLOYS. If you are modifiying this file for an upgrade, you must **CAREFULLY** ensure\\n * the contract storage layout is not impacted.\\n *\\n * BE VERY CAREFUL MODIFYING THE VALUES IN THIS FILE!\\n */\\n\\n// ============= Enum =============\\n\\n/// @notice Enum representing address role\\n// Returns uint\\n// None - 0\\n// Router - 1\\n// Watcher - 2\\n// Admin - 3\\nenum Role {\\n None,\\n RouterAdmin,\\n Watcher,\\n Admin\\n}\\n\\n/**\\n * @notice Enum representing status of destination transfer\\n * @dev Status is only assigned on the destination domain, will always be \\\"none\\\" for the\\n * origin domains\\n * @return uint - Index of value in enum\\n */\\nenum DestinationTransferStatus {\\n None, // 0\\n Reconciled, // 1\\n Executed, // 2\\n Completed // 3 - executed + reconciled\\n}\\n\\n/**\\n * @notice These are the parameters that will remain constant between the\\n * two chains. They are supplied on `xcall` and should be asserted on `execute`\\n * @property to - The account that receives funds, in the event of a crosschain call,\\n * will receive funds if the call fails.\\n *\\n * @param originDomain - The originating domain (i.e. where `xcall` is called)\\n * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\\\\\\n * @param canonicalDomain - The canonical domain of the asset you are bridging\\n * @param to - The address you are sending funds (and potentially data) to\\n * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers\\n * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.\\n * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.\\n * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if\\n * a user takes 1% slippage, this is expressed as 1_000)\\n * @param originSender - The msg.sender of the xcall\\n * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)\\n * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals\\n * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique\\n * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets\\n */\\nstruct TransferInfo {\\n uint32 originDomain;\\n uint32 destinationDomain;\\n uint32 canonicalDomain;\\n address to;\\n address delegate;\\n bool receiveLocal;\\n bytes callData;\\n uint256 slippage;\\n address originSender;\\n uint256 bridgedAmt;\\n uint256 normalizedIn;\\n uint256 nonce;\\n bytes32 canonicalId;\\n}\\n\\n/**\\n * @notice\\n * @param params - The TransferInfo. These are consistent across sending and receiving chains.\\n * @param routers - The routers who you are sending the funds on behalf of.\\n * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds\\n * for the signed transfer ID.\\n * @param sequencer - The sequencer who assigned the router path to this transfer.\\n * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability\\n * for the path that was signed.\\n */\\nstruct ExecuteArgs {\\n TransferInfo params;\\n address[] routers;\\n bytes[] routerSignatures;\\n address sequencer;\\n bytes sequencerSignature;\\n}\\n\\n/**\\n * @notice Contains configs for each router\\n * @param approved Whether the router is allowlisted, settable by admin\\n * @param portalApproved Whether the router is allowlisted for portals, settable by admin\\n * @param routerOwners The address that can update the `recipient`\\n * @param proposedRouterOwners Owner candidates\\n * @param proposedRouterTimestamp When owner candidate was proposed (there is a delay to acceptance)\\n */\\nstruct RouterConfig {\\n bool approved;\\n bool portalApproved;\\n address owner;\\n address recipient;\\n address proposed;\\n uint256 proposedTimestamp;\\n}\\n\\n/**\\n * @notice Contains configurations for tokens\\n * @dev Struct will be stored on the hash of the `canonicalId` and `canonicalDomain`. There are also\\n * two separate reverse lookups, that deliver plaintext information based on the passed in address (can\\n * either be representation or adopted address passed in).\\n *\\n * If the decimals are updated in a future token upgrade, the transfers should fail. If that happens, the\\n * asset and swaps must be removed, and then they can be readded\\n *\\n * @param representation Address of minted asset on this domain. If the token is of local origin (meaning it was\\n * originally deployed on this chain), this MUST map to address(0).\\n * @param representationDecimals Decimals of minted asset on this domain\\n * @param adopted Address of adopted asset on this domain\\n * @param adoptedDecimals Decimals of adopted asset on this domain\\n * @param adoptedToLocalExternalPools Holds the AMMs for swapping in and out of local assets\\n * @param approval Allowed assets\\n * @param cap Liquidity caps of whitelisted assets. If 0, no cap is enforced.\\n * @param custodied Custodied balance by address\\n */\\nstruct TokenConfig {\\n address representation;\\n uint8 representationDecimals;\\n address adopted;\\n uint8 adoptedDecimals;\\n address adoptedToLocalExternalPools;\\n bool approval;\\n uint256 cap;\\n uint256 custodied;\\n}\\n\\nstruct AppStorage {\\n //\\n // 0\\n bool initialized;\\n //\\n // Connext\\n //\\n // 1\\n uint256 LIQUIDITY_FEE_NUMERATOR;\\n /**\\n * @notice The local address that is custodying relayer fees\\n */\\n // 2\\n address relayerFeeVault;\\n /**\\n * @notice Nonce for the contract, used to keep unique transfer ids.\\n * @dev Assigned at first interaction (xcall on origin domain).\\n */\\n // 3\\n uint256 nonce;\\n /**\\n * @notice The domain this contract exists on.\\n * @dev Must match the domain identifier, which is distinct from the \\\"chainId\\\".\\n */\\n // 4\\n uint32 domain;\\n /**\\n * @notice Mapping of adopted to canonical asset information.\\n */\\n // 5\\n mapping(address => TokenId) adoptedToCanonical;\\n /**\\n * @notice Mapping of representation to canonical asset information.\\n */\\n // 6\\n mapping(address => TokenId) representationToCanonical;\\n /**\\n * @notice Mapping of hash(canonicalId, canonicalDomain) to token config on this domain.\\n */\\n // 7\\n mapping(bytes32 => TokenConfig) tokenConfigs;\\n /**\\n * @notice Mapping to track transfer status on destination domain\\n */\\n // 8\\n mapping(bytes32 => DestinationTransferStatus) transferStatus;\\n /**\\n * @notice Mapping holding router address that provided fast liquidity.\\n */\\n // 9\\n mapping(bytes32 => address[]) routedTransfers;\\n /**\\n * @notice Mapping of router to available balance of an asset.\\n * @dev Routers should always store liquidity that they can expect to receive via the bridge on\\n * this domain (the local asset).\\n */\\n // 10\\n mapping(address => mapping(address => uint256)) routerBalances;\\n /**\\n * @notice Mapping of approved relayers\\n * @dev Send relayer fee if msg.sender is approvedRelayer; otherwise revert.\\n */\\n // 11\\n mapping(address => bool) approvedRelayers;\\n /**\\n * @notice The max amount of routers a payment can be routed through.\\n */\\n // 12\\n uint256 maxRoutersPerTransfer;\\n /**\\n * @notice Stores a mapping of transfer id to slippage overrides.\\n */\\n // 13\\n mapping(bytes32 => uint256) slippage;\\n /**\\n * @notice Stores a mapping of transfer id to receive local overrides.\\n */\\n // 14\\n mapping(bytes32 => bool) receiveLocalOverride;\\n /**\\n * @notice Stores a mapping of remote routers keyed on domains.\\n * @dev Addresses are cast to bytes32.\\n * This mapping is required because the Connext now contains the BridgeRouter and must implement\\n * the remotes interface.\\n */\\n // 15\\n mapping(uint32 => bytes32) remotes;\\n //\\n // ProposedOwnable\\n //\\n // 17\\n address _proposed;\\n // 18\\n uint256 _proposedOwnershipTimestamp;\\n // 19\\n bool _routerAllowlistRemoved;\\n // 20\\n uint256 _routerAllowlistTimestamp;\\n /**\\n * @notice Stores a mapping of address to Roles\\n * @dev returns uint representing the enum Role value\\n */\\n // 21\\n mapping(address => Role) roles;\\n //\\n // RouterFacet\\n //\\n // 22\\n mapping(address => RouterConfig) routerConfigs;\\n //\\n // ReentrancyGuard\\n //\\n // 23\\n uint256 _status;\\n // 24\\n uint256 _xcallStatus;\\n //\\n // StableSwap\\n //\\n /**\\n * @notice Mapping holding the AMM storages for swapping in and out of local assets\\n * @dev Swaps for an adopted asset <> local asset (i.e. POS USDC <> nextUSDC on polygon)\\n * Struct storing data responsible for automatic market maker functionalities. In order to\\n * access this data, this contract uses SwapUtils library. For more details, see SwapUtils.sol.\\n */\\n // 25\\n mapping(bytes32 => SwapUtils.Swap) swapStorages;\\n /**\\n * @notice Maps token address to an index in the pool. Used to prevent duplicate tokens in the pool.\\n * @dev getTokenIndex function also relies on this mapping to retrieve token index.\\n */\\n // 26\\n mapping(bytes32 => mapping(address => uint8)) tokenIndexes;\\n /**\\n * The address of an existing LPToken contract to use as a target\\n * this target must be the address which connext deployed on this chain.\\n */\\n // 27\\n address lpTokenTargetAddress;\\n /**\\n * @notice Stores whether or not bribing, AMMs, have been paused.\\n */\\n // 28\\n bool _paused;\\n //\\n // AavePortals\\n //\\n /**\\n * @notice Address of Aave Pool contract.\\n */\\n // 29\\n address aavePool;\\n /**\\n * @notice Fee percentage numerator for using Portal liquidity.\\n * @dev Assumes the same basis points as the liquidity fee.\\n */\\n // 30\\n uint256 aavePortalFeeNumerator;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 31\\n mapping(bytes32 => uint256) portalDebt;\\n /**\\n * @notice Mapping to store the transfer liquidity amount provided by Aave Portals.\\n */\\n // 32\\n mapping(bytes32 => uint256) portalFeeDebt;\\n /**\\n * @notice Mapping of approved sequencers\\n * @dev Sequencer address provided must belong to an approved sequencer in order to call `execute`\\n * for the fast liquidity route.\\n */\\n // 33\\n mapping(address => bool) approvedSequencers;\\n /**\\n * @notice Remote connection manager for xapp.\\n */\\n // 34\\n IConnectorManager xAppConnectionManager;\\n}\\n\\nlibrary LibConnextStorage {\\n function connextStorage() internal pure returns (AppStorage storage ds) {\\n assembly {\\n ds.slot := 0\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe33ca33dbd4136708e5467a4bae98abd105064e0c2ce0c2c2c7576d1c26350d\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/LibDiamond.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/******************************************************************************\\\\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\\n/******************************************************************************/\\nimport {IDiamondCut} from \\\"../interfaces/IDiamondCut.sol\\\";\\n\\n// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.\\n// The loupe functions are required by the EIP2535 Diamonds standard\\n\\nlibrary LibDiamond {\\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\\\"diamond.standard.diamond.storage\\\");\\n\\n struct FacetAddressAndPosition {\\n address facetAddress;\\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\\n }\\n\\n struct FacetFunctionSelectors {\\n bytes4[] functionSelectors;\\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\\n }\\n\\n struct DiamondStorage {\\n // maps function selector to the facet address and\\n // the position of the selector in the facetFunctionSelectors.selectors array\\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\\n // maps facet addresses to function selectors\\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\\n // facet addresses\\n address[] facetAddresses;\\n // Used to query if a contract implements an interface.\\n // Used to implement ERC-165.\\n mapping(bytes4 => bool) supportedInterfaces;\\n // owner of the contract\\n address contractOwner;\\n // hash of proposed facets => acceptance time\\n mapping(bytes32 => uint256) acceptanceTimes;\\n // acceptance delay for upgrading facets\\n uint256 acceptanceDelay;\\n }\\n\\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\\n bytes32 position = DIAMOND_STORAGE_POSITION;\\n assembly {\\n ds.slot := position\\n }\\n }\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n function setContractOwner(address _newOwner) internal {\\n DiamondStorage storage ds = diamondStorage();\\n emit OwnershipTransferred(ds.contractOwner, _newOwner);\\n ds.contractOwner = _newOwner;\\n }\\n\\n function contractOwner() internal view returns (address contractOwner_) {\\n contractOwner_ = diamondStorage().contractOwner;\\n }\\n\\n function acceptanceDelay() internal view returns (uint256) {\\n return diamondStorage().acceptanceDelay;\\n }\\n\\n function acceptanceTime(bytes32 _key) internal view returns (uint256) {\\n return diamondStorage().acceptanceTimes[_key];\\n }\\n\\n function enforceIsContractOwner() internal view {\\n require(msg.sender == diamondStorage().contractOwner, \\\"LibDiamond: !contract owner\\\");\\n }\\n\\n event DiamondCutProposed(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata, uint256 deadline);\\n\\n function proposeDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: to save gas, verification that `proposeDiamondCut` and `diamondCut` are not\\n // included is performed in `diamondCut`, where there is already a loop over facets.\\n // In the case where these cuts are performed, admins must call `rescindDiamondCut`\\n\\n DiamondStorage storage ds = diamondStorage();\\n uint256 acceptance = block.timestamp + ds.acceptanceDelay;\\n ds.acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))] = acceptance;\\n emit DiamondCutProposed(_diamondCut, _init, _calldata, acceptance);\\n }\\n\\n event DiamondCutRescinded(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n function rescindDiamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n // NOTE: you can always rescind a proposed facet cut as the owner, even if outside of the validity\\n // period or befor the delay elpases\\n delete diamondStorage().acceptanceTimes[keccak256(abi.encode(_diamondCut, _init, _calldata))];\\n emit DiamondCutRescinded(_diamondCut, _init, _calldata);\\n }\\n\\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\\n\\n // Internal function version of diamondCut\\n function diamondCut(\\n IDiamondCut.FacetCut[] memory _diamondCut,\\n address _init,\\n bytes memory _calldata\\n ) internal {\\n DiamondStorage storage ds = diamondStorage();\\n bytes32 key = keccak256(abi.encode(_diamondCut, _init, _calldata));\\n if (ds.facetAddresses.length != 0) {\\n uint256 time = ds.acceptanceTimes[key];\\n require(time != 0 && time <= block.timestamp, \\\"LibDiamond: delay not elapsed\\\");\\n // Reset the acceptance time to ensure the same set of updates cannot be replayed\\n // without going through a proposal window\\n\\n // NOTE: the only time this will not be set to 0 is when there are no\\n // existing facet addresses (on initialization, or when starting after a bad upgrade,\\n // for example).\\n // The only relevant case is the initial case, which has no acceptance time. otherwise,\\n // there is no way to update the facet selector mapping to call `diamondCut`.\\n // Avoiding setting the empty value will save gas on the initial deployment.\\n delete ds.acceptanceTimes[key];\\n } // Otherwise, this is the first instance of deployment and it can be set automatically\\n uint256 len = _diamondCut.length;\\n for (uint256 facetIndex; facetIndex < len; ) {\\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\\n if (action == IDiamondCut.FacetCutAction.Add) {\\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\\n } else {\\n revert(\\\"LibDiamondCut: Incorrect FacetCutAction\\\");\\n }\\n\\n unchecked {\\n ++facetIndex;\\n }\\n }\\n emit DiamondCut(_diamondCut, _init, _calldata);\\n initializeDiamondCut(_init, _calldata);\\n }\\n\\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress == address(0), \\\"LibDiamondCut: Can't add function that already exists\\\");\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n uint256 len = _functionSelectors.length;\\n require(len != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Add facet can't be address(0)\\\");\\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\\n // add new facet address if it does not exist\\n if (selectorPosition == 0) {\\n addFacet(ds, _facetAddress);\\n }\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n require(oldFacetAddress != _facetAddress, \\\"LibDiamondCut: Can't replace function with same function\\\");\\n removeFunction(ds, oldFacetAddress, selector);\\n addFunction(ds, selector, selectorPosition, _facetAddress);\\n selectorPosition++;\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\\n require(_functionSelectors.length != 0, \\\"LibDiamondCut: No selectors in facet to cut\\\");\\n DiamondStorage storage ds = diamondStorage();\\n // get the propose and cut selectors -- can never remove these\\n bytes4 proposeSelector = IDiamondCut.proposeDiamondCut.selector;\\n bytes4 cutSelector = IDiamondCut.diamondCut.selector;\\n // if function does not exist then do nothing and return\\n require(_facetAddress == address(0), \\\"LibDiamondCut: Remove facet address must be address(0)\\\");\\n uint256 len = _functionSelectors.length;\\n for (uint256 selectorIndex; selectorIndex < len; ) {\\n bytes4 selector = _functionSelectors[selectorIndex];\\n require(selector != proposeSelector && selector != cutSelector, \\\"LibDiamondCut: Cannot remove cut selectors\\\");\\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\\n removeFunction(ds, oldFacetAddress, selector);\\n\\n unchecked {\\n ++selectorIndex;\\n }\\n }\\n }\\n\\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\\n enforceHasContractCode(_facetAddress, \\\"LibDiamondCut: New facet has no code\\\");\\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\\n ds.facetAddresses.push(_facetAddress);\\n }\\n\\n function addFunction(\\n DiamondStorage storage ds,\\n bytes4 _selector,\\n uint96 _selectorPosition,\\n address _facetAddress\\n ) internal {\\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\\n }\\n\\n function removeFunction(\\n DiamondStorage storage ds,\\n address _facetAddress,\\n bytes4 _selector\\n ) internal {\\n require(_facetAddress != address(0), \\\"LibDiamondCut: Can't remove function that doesn't exist\\\");\\n // an immutable function is a function defined directly in a diamond\\n require(_facetAddress != address(this), \\\"LibDiamondCut: Can't remove immutable function\\\");\\n // replace selector with last selector, then delete last selector\\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\\n // if not the same then replace _selector with lastSelector\\n if (selectorPosition != lastSelectorPosition) {\\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\\n }\\n // delete the last selector\\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\\n delete ds.selectorToFacetAndPosition[_selector];\\n\\n // if no more selectors for facet address then delete the facet address\\n if (lastSelectorPosition == 0) {\\n // replace facet address with last facet address and delete last facet address\\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n if (facetAddressPosition != lastFacetAddressPosition) {\\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\\n }\\n ds.facetAddresses.pop();\\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\\n }\\n }\\n\\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\\n if (_init == address(0)) {\\n require(_calldata.length == 0, \\\"LibDiamondCut: _init is address(0) but_calldata is not empty\\\");\\n } else {\\n require(_calldata.length != 0, \\\"LibDiamondCut: _calldata is empty but _init is not address(0)\\\");\\n if (_init != address(this)) {\\n enforceHasContractCode(_init, \\\"LibDiamondCut: _init address has no code\\\");\\n }\\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\\n if (!success) {\\n if (error.length != 0) {\\n // bubble up the error\\n revert(string(error));\\n } else {\\n revert(\\\"LibDiamondCut: _init function reverted\\\");\\n }\\n }\\n }\\n }\\n\\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\\n require(_contract.code.length != 0, _errorMessage);\\n }\\n}\\n\",\"keccak256\":\"0x630090ecfe33ecddbe664c844b41da0e6ed6275b8d19e4922707adee5384a61e\",\"license\":\"MIT\"},\"contracts/core/connext/libraries/MathUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MathUtils library\\n * @notice A library to be used in conjunction with SafeMath. Contains functions for calculating\\n * differences between two uint256.\\n */\\nlibrary MathUtils {\\n /**\\n * @notice Compares a and b and returns true if the difference between a and b\\n * is less than 1 or equal to each other.\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return True if the difference between a and b is less than 1 or equal,\\n * otherwise return false\\n */\\n function within1(uint256 a, uint256 b) internal pure returns (bool) {\\n return (difference(a, b) < 1 + 1); // instead of <=1\\n }\\n\\n /**\\n * @notice Calculates absolute difference between a and b\\n * @param a uint256 to compare with\\n * @param b uint256 to compare with\\n * @return Difference between a and b\\n */\\n function difference(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a > b) {\\n return a - b;\\n }\\n return b - a;\\n }\\n}\\n\",\"keccak256\":\"0xe5f282e178c23b58b7c7880c59b4d9d191ca8766921eb8407bce284dc1b7866a\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/SwapUtils.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {SafeERC20, IERC20} from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport {LPToken} from \\\"../helpers/LPToken.sol\\\";\\n\\nimport {AmplificationUtils} from \\\"./AmplificationUtils.sol\\\";\\nimport {MathUtils} from \\\"./MathUtils.sol\\\";\\nimport {AssetLogic} from \\\"./AssetLogic.sol\\\";\\nimport {Constants} from \\\"./Constants.sol\\\";\\n\\n/**\\n * @title SwapUtils library\\n * @notice A library to be used within Swap.sol. Contains functions responsible for custody and AMM functionalities.\\n * @dev Contracts relying on this library must initialize SwapUtils.Swap struct then use this library\\n * for SwapUtils.Swap struct. Note that this library contains both functions called by users and admins.\\n * Admin functions should be protected within contracts using this library.\\n */\\nlibrary SwapUtils {\\n using SafeERC20 for IERC20;\\n using MathUtils for uint256;\\n\\n /*** EVENTS ***/\\n\\n event TokenSwap(\\n bytes32 indexed key,\\n address indexed buyer,\\n uint256 tokensSold,\\n uint256 tokensBought,\\n uint128 soldId,\\n uint128 boughtId\\n );\\n event AddLiquidity(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event RemoveLiquidity(bytes32 indexed key, address indexed provider, uint256[] tokenAmounts, uint256 lpTokenSupply);\\n event RemoveLiquidityOne(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256 lpTokenAmount,\\n uint256 lpTokenSupply,\\n uint256 boughtId,\\n uint256 tokensBought\\n );\\n event RemoveLiquidityImbalance(\\n bytes32 indexed key,\\n address indexed provider,\\n uint256[] tokenAmounts,\\n uint256[] fees,\\n uint256 invariant,\\n uint256 lpTokenSupply\\n );\\n event NewAdminFee(bytes32 indexed key, uint256 newAdminFee);\\n event NewSwapFee(bytes32 indexed key, uint256 newSwapFee);\\n\\n struct Swap {\\n // variables around the ramp management of A,\\n // the amplification coefficient * n ** (n - 1)\\n // see Curve stableswap paper for details\\n bytes32 key;\\n uint256 initialA;\\n uint256 futureA;\\n uint256 initialATime;\\n uint256 futureATime;\\n // fee calculation\\n uint256 swapFee;\\n uint256 adminFee;\\n LPToken lpToken;\\n // contract references for all tokens being pooled\\n IERC20[] pooledTokens;\\n // multipliers for each pooled token's precision to get to Constants.POOL_PRECISION_DECIMALS\\n // for example, TBTC has 18 decimals, so the multiplier should be 1. WBTC\\n // has 8, so the multiplier should be 10 ** 18 / 10 ** 8 => 10 ** 10\\n uint256[] tokenPrecisionMultipliers;\\n // the pool balance of each token, in the token's precision\\n // the contract's actual token balance might differ\\n uint256[] balances;\\n // the admin fee balance of each token, in the token's precision\\n uint256[] adminFees;\\n // the flag if this pool disabled by admin. once disabled, only remove liquidity will work.\\n bool disabled;\\n // once pool disabled, admin can remove pool after passed removeTime. and reinitialize.\\n uint256 removeTime;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // calculateWithdrawOneTokenDY function to avoid stack too deep errors\\n struct CalculateWithdrawOneTokenDYInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 newY;\\n uint256 feePerToken;\\n uint256 preciseA;\\n }\\n\\n // Struct storing variables used in calculations in the\\n // {add,remove}Liquidity functions to avoid stack too deep errors\\n struct ManageLiquidityInfo {\\n uint256 d0;\\n uint256 d1;\\n uint256 d2;\\n uint256 preciseA;\\n LPToken lpToken;\\n uint256 totalSupply;\\n uint256[] balances;\\n uint256[] multipliers;\\n }\\n\\n /*** VIEW & PURE FUNCTIONS ***/\\n\\n function _getAPrecise(Swap storage self) private view returns (uint256) {\\n return AmplificationUtils._getAPrecise(self);\\n }\\n\\n /**\\n * @notice Calculate the dy, the amount of selected token that user receives and\\n * the fee of withdrawing in one token\\n * @param tokenAmount the amount to withdraw in the pool's precision\\n * @param tokenIndex which token will be withdrawn\\n * @param self Swap struct to read from\\n * @return the amount of token user will receive\\n */\\n function calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex\\n ) internal view returns (uint256) {\\n (uint256 availableTokenAmount, ) = _calculateWithdrawOneToken(\\n self,\\n tokenAmount,\\n tokenIndex,\\n self.lpToken.totalSupply()\\n );\\n return availableTokenAmount;\\n }\\n\\n function _calculateWithdrawOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 totalSupply\\n ) private view returns (uint256, uint256) {\\n uint256 dy;\\n uint256 newY;\\n uint256 currentY;\\n\\n (dy, newY, currentY) = calculateWithdrawOneTokenDY(self, tokenIndex, tokenAmount, totalSupply);\\n\\n // dy_0 (without fees)\\n // dy, dy_0 - dy\\n\\n uint256 dySwapFee = (currentY - newY) / self.tokenPrecisionMultipliers[tokenIndex] - dy;\\n\\n return (dy, dySwapFee);\\n }\\n\\n /**\\n * @notice Calculate the dy of withdrawing in one token\\n * @param self Swap struct to read from\\n * @param tokenIndex which token will be withdrawn\\n * @param tokenAmount the amount to withdraw in the pools precision\\n * @return the d and the new y after withdrawing one token\\n */\\n function calculateWithdrawOneTokenDY(\\n Swap storage self,\\n uint8 tokenIndex,\\n uint256 tokenAmount,\\n uint256 totalSupply\\n )\\n internal\\n view\\n returns (\\n uint256,\\n uint256,\\n uint256\\n )\\n {\\n // Get the current D, then solve the stableswap invariant\\n // y_i for D - tokenAmount\\n uint256[] memory xp = _xp(self);\\n\\n require(tokenIndex < xp.length, \\\"index out of range\\\");\\n\\n CalculateWithdrawOneTokenDYInfo memory v = CalculateWithdrawOneTokenDYInfo(0, 0, 0, 0, 0);\\n v.preciseA = _getAPrecise(self);\\n v.d0 = getD(xp, v.preciseA);\\n v.d1 = v.d0 - ((tokenAmount * v.d0) / totalSupply);\\n\\n require(tokenAmount <= xp[tokenIndex], \\\"exceeds available\\\");\\n\\n v.newY = getYD(v.preciseA, tokenIndex, xp, v.d1);\\n\\n uint256[] memory xpReduced = new uint256[](xp.length);\\n\\n v.feePerToken = _feePerToken(self.swapFee, xp.length);\\n // TODO: Set a length variable (at top) instead of reading xp.length on each loop.\\n uint256 len = xp.length;\\n for (uint256 i; i < len; ) {\\n uint256 xpi = xp[i];\\n // if i == tokenIndex, dxExpected = xp[i] * d1 / d0 - newY\\n // else dxExpected = xp[i] - (xp[i] * d1 / d0)\\n // xpReduced[i] -= dxExpected * fee / Constants.FEE_DENOMINATOR\\n xpReduced[i] =\\n xpi -\\n ((((i == tokenIndex) ? ((xpi * v.d1) / v.d0 - v.newY) : (xpi - (xpi * v.d1) / v.d0)) * v.feePerToken) /\\n Constants.FEE_DENOMINATOR);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n uint256 dy = xpReduced[tokenIndex] - getYD(v.preciseA, tokenIndex, xpReduced, v.d1);\\n dy = (dy - 1) / (self.tokenPrecisionMultipliers[tokenIndex]);\\n\\n return (dy, v.newY, xp[tokenIndex]);\\n }\\n\\n /**\\n * @notice Calculate the price of a token in the pool with given\\n * precision-adjusted balances and a particular D.\\n *\\n * @dev This is accomplished via solving the invariant iteratively.\\n * See the StableSwap paper and Curve.fi implementation for further details.\\n *\\n * x_1**2 + x1 * (sum' - (A*n**n - 1) * D / (A * n**n)) = D ** (n + 1) / (n ** (2 * n) * prod' * A)\\n * x_1**2 + b*x_1 = c\\n * x_1 = (x_1**2 + c) / (2*x_1 + b)\\n *\\n * @param a the amplification coefficient * n ** (n - 1). See the StableSwap paper for details.\\n * @param tokenIndex Index of token we are calculating for.\\n * @param xp a precision-adjusted set of pool balances. Array should be\\n * the same cardinality as the pool.\\n * @param d the stableswap invariant\\n * @return the price of the token, in the same precision as in xp\\n */\\n function getYD(\\n uint256 a,\\n uint8 tokenIndex,\\n uint256[] memory xp,\\n uint256 d\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndex < numTokens, \\\"Token not found\\\");\\n\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < numTokens; ) {\\n if (i != tokenIndex) {\\n s += xp[i];\\n c = (c * d) / (xp[i] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n // Select d as the starting point of the Newton method. Because y < D\\n // D is the best option as the starting point in case the pool is very imbalanced.\\n uint256 y = d;\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Get D, the StableSwap invariant, based on a set of balances and a particular A.\\n * @param xp a precision-adjusted set of pool balances. Array should be the same cardinality\\n * as the pool.\\n * @param a the amplification coefficient * n ** (n - 1) in A_PRECISION.\\n * See the StableSwap paper for details\\n * @return the invariant, at the precision of the pool\\n */\\n function getD(uint256[] memory xp, uint256 a) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n uint256 s;\\n for (uint256 i; i < numTokens; ) {\\n s += xp[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n if (s == 0) {\\n return 0;\\n }\\n\\n uint256 prevD;\\n uint256 d = s;\\n uint256 nA = a * numTokens;\\n\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n uint256 dP = d;\\n for (uint256 j; j < numTokens; ) {\\n dP = (dP * d) / (xp[j] * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // dP = dP * D * D * D * ... overflow!\\n\\n unchecked {\\n ++j;\\n }\\n }\\n prevD = d;\\n d =\\n (((nA * s) / Constants.A_PRECISION + dP * numTokens) * d) /\\n ((((nA - Constants.A_PRECISION) * d) / Constants.A_PRECISION + (numTokens + 1) * dP));\\n if (d.within1(prevD)) {\\n return d;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Convergence should occur in 4 loops or less. If this is reached, there may be something wrong\\n // with the pool. If this were to occur repeatedly, LPs should withdraw via `removeLiquidity()`\\n // function which does not rely on D.\\n revert(\\\"D does not converge\\\");\\n }\\n\\n /**\\n * @notice Given a set of balances and precision multipliers, return the\\n * precision-adjusted balances.\\n *\\n * @param balances an array of token balances, in their native precisions.\\n * These should generally correspond with pooled tokens.\\n *\\n * @param precisionMultipliers an array of multipliers, corresponding to\\n * the amounts in the balances array. When multiplied together they\\n * should yield amounts at the pool's precision.\\n *\\n * @return an array of amounts \\\"scaled\\\" to the pool's precision\\n */\\n function _xp(uint256[] memory balances, uint256[] memory precisionMultipliers)\\n internal\\n pure\\n returns (uint256[] memory)\\n {\\n uint256 numTokens = balances.length;\\n require(numTokens == precisionMultipliers.length, \\\"mismatch multipliers\\\");\\n uint256[] memory xp = new uint256[](numTokens);\\n for (uint256 i; i < numTokens; ) {\\n xp[i] = balances[i] * precisionMultipliers[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return xp;\\n }\\n\\n /**\\n * @notice Return the precision-adjusted balances of all tokens in the pool\\n * @param self Swap struct to read from\\n * @return the pool balances \\\"scaled\\\" to the pool's precision, allowing\\n * them to be more easily compared.\\n */\\n function _xp(Swap storage self) internal view returns (uint256[] memory) {\\n return _xp(self.balances, self.tokenPrecisionMultipliers);\\n }\\n\\n /**\\n * @notice Get the virtual price, to help calculate profit\\n * @param self Swap struct to read from\\n * @return the virtual price, scaled to precision of Constants.POOL_PRECISION_DECIMALS\\n */\\n function getVirtualPrice(Swap storage self) internal view returns (uint256) {\\n uint256 d = getD(_xp(self), _getAPrecise(self));\\n LPToken lpToken = self.lpToken;\\n uint256 supply = lpToken.totalSupply();\\n if (supply != 0) {\\n return (d * (10**uint256(Constants.POOL_PRECISION_DECIMALS))) / supply;\\n }\\n return 0;\\n }\\n\\n /**\\n * @notice Calculate the new balances of the tokens given the indexes of the token\\n * that is swapped from (FROM) and the token that is swapped to (TO).\\n * This function is used as a helper function to calculate how much TO token\\n * the user should receive on swap.\\n *\\n * @param preciseA precise form of amplification coefficient\\n * @param tokenIndexFrom index of FROM token\\n * @param tokenIndexTo index of TO token\\n * @param x the new total amount of FROM token\\n * @param xp balances of the tokens in the pool\\n * @return the amount of TO token that should remain in the pool\\n */\\n function getY(\\n uint256 preciseA,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 x,\\n uint256[] memory xp\\n ) internal pure returns (uint256) {\\n uint256 numTokens = xp.length;\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n require(tokenIndexFrom < numTokens && tokenIndexTo < numTokens, \\\"token not found\\\");\\n\\n uint256 d = getD(xp, preciseA);\\n uint256 c = d;\\n uint256 s;\\n uint256 nA = numTokens * preciseA;\\n\\n uint256 _x;\\n for (uint256 i; i < numTokens; ) {\\n if (i == tokenIndexFrom) {\\n _x = x;\\n } else if (i != tokenIndexTo) {\\n _x = xp[i];\\n } else {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n s += _x;\\n c = (c * d) / (_x * numTokens);\\n // If we were to protect the division loss we would have to keep the denominator separate\\n // and divide at the end. However this leads to overflow with large numTokens or/and D.\\n // c = c * D * D * D * ... overflow!\\n\\n unchecked {\\n ++i;\\n }\\n }\\n c = (c * d * Constants.A_PRECISION) / (nA * numTokens);\\n uint256 b = s + ((d * Constants.A_PRECISION) / nA);\\n uint256 yPrev;\\n uint256 y = d;\\n\\n // iterative approximation\\n for (uint256 i; i < Constants.MAX_LOOP_LIMIT; ) {\\n yPrev = y;\\n y = ((y * y) + c) / ((y * 2) + b - d);\\n if (y.within1(yPrev)) {\\n return y;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n revert(\\\"Approximation did not converge\\\");\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get\\n */\\n function calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx\\n ) internal view returns (uint256 dy) {\\n (dy, ) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, self.balances);\\n }\\n\\n /**\\n * @notice Externally calculates a swap between two tokens.\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy.\\n * @return dx the number of tokens the user have to transfer + fee\\n */\\n function calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy\\n ) internal view returns (uint256 dx) {\\n (dx, ) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, self.balances);\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dx the number of tokens to sell. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dy the number of tokens the user will get in the token's precision. ex WBTC -> 8\\n * @return dyFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256[] memory balances\\n ) internal view returns (uint256 dy, uint256 dyFee) {\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n uint256 x = dx * multipliers[tokenIndexFrom] + xp[tokenIndexFrom];\\n uint256 y = getY(_getAPrecise(self), tokenIndexFrom, tokenIndexTo, x, xp);\\n dy = xp[tokenIndexTo] - y - 1;\\n dyFee = (dy * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dy = (dy - dyFee) / multipliers[tokenIndexTo];\\n }\\n\\n /**\\n * @notice Internally calculates a swap between two tokens.\\n *\\n * @dev The caller is expected to transfer the actual amounts (dx and dy)\\n * using the token contracts.\\n *\\n * @param self Swap struct to read from\\n * @param tokenIndexFrom the token to sell\\n * @param tokenIndexTo the token to buy\\n * @param dy the number of tokens to buy. If the token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @return dx the number of tokens the user have to deposit in the token's precision. ex WBTC -> 8\\n * @return dxFee the associated fee in multiplied precision (Constants.POOL_PRECISION_DECIMALS)\\n */\\n function _calculateSwapInv(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256[] memory balances\\n ) internal view returns (uint256 dx, uint256 dxFee) {\\n require(tokenIndexFrom != tokenIndexTo, \\\"compare token to itself\\\");\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n uint256[] memory xp = _xp(balances, multipliers);\\n require(tokenIndexFrom < xp.length && tokenIndexTo < xp.length, \\\"index out of range\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256 d0 = getD(xp, a);\\n\\n xp[tokenIndexTo] = xp[tokenIndexTo] - (dy * multipliers[tokenIndexTo]);\\n uint256 x = getYD(a, tokenIndexFrom, xp, d0);\\n dx = (x + 1) - xp[tokenIndexFrom];\\n dxFee = (dx * self.swapFee) / Constants.FEE_DENOMINATOR;\\n dx = (dx + dxFee) / multipliers[tokenIndexFrom];\\n }\\n\\n /**\\n * @notice A simple method to calculate amount of each underlying\\n * tokens that is returned upon burning given amount of\\n * LP tokens\\n *\\n * @param amount the amount of LP tokens that would to be burned on\\n * withdrawal\\n * @return array of amounts of tokens user will receive\\n */\\n function calculateRemoveLiquidity(Swap storage self, uint256 amount) internal view returns (uint256[] memory) {\\n return _calculateRemoveLiquidity(self.balances, amount, self.lpToken.totalSupply());\\n }\\n\\n function _calculateRemoveLiquidity(\\n uint256[] memory balances,\\n uint256 amount,\\n uint256 totalSupply\\n ) internal pure returns (uint256[] memory) {\\n require(amount <= totalSupply, \\\"exceed total supply\\\");\\n\\n uint256 numBalances = balances.length;\\n uint256[] memory amounts = new uint256[](numBalances);\\n\\n for (uint256 i; i < numBalances; ) {\\n amounts[i] = (balances[i] * amount) / totalSupply;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n return amounts;\\n }\\n\\n /**\\n * @notice A simple method to calculate prices from deposits or\\n * withdrawals, excluding fees but including slippage. This is\\n * helpful as an input into the various \\\"min\\\" parameters on calls\\n * to fight front-running\\n *\\n * @dev This shouldn't be used outside frontends for user estimates.\\n *\\n * @param self Swap struct to read from\\n * @param amounts an array of token amounts to deposit or withdrawal,\\n * corresponding to pooledTokens. The amount should be in each\\n * pooled token's native precision. If a token charges a fee on transfers,\\n * use the amount that gets transferred after the fee.\\n * @param deposit whether this is a deposit or a withdrawal\\n * @return if deposit was true, total amount of lp token that will be minted and if\\n * deposit was false, total amount of lp token that will be burned\\n */\\n function calculateTokenAmount(\\n Swap storage self,\\n uint256[] calldata amounts,\\n bool deposit\\n ) internal view returns (uint256) {\\n uint256[] memory balances = self.balances;\\n uint256 numBalances = balances.length;\\n require(amounts.length == numBalances, \\\"invalid length of amounts\\\");\\n\\n uint256 a = _getAPrecise(self);\\n uint256[] memory multipliers = self.tokenPrecisionMultipliers;\\n\\n uint256 d0 = getD(_xp(balances, multipliers), a);\\n for (uint256 i; i < numBalances; ) {\\n if (deposit) {\\n balances[i] = balances[i] + amounts[i];\\n } else {\\n balances[i] = balances[i] - amounts[i];\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n uint256 d1 = getD(_xp(balances, multipliers), a);\\n uint256 totalSupply = self.lpToken.totalSupply();\\n\\n if (deposit) {\\n return ((d1 - d0) * totalSupply) / d0;\\n } else {\\n return ((d0 - d1) * totalSupply) / d0;\\n }\\n }\\n\\n /**\\n * @notice return accumulated amount of admin fees of the token with given index\\n * @param self Swap struct to read from\\n * @param index Index of the pooled token\\n * @return admin balance in the token's precision\\n */\\n function getAdminBalance(Swap storage self, uint256 index) internal view returns (uint256) {\\n require(index < self.pooledTokens.length, \\\"index out of range\\\");\\n return self.adminFees[index];\\n }\\n\\n /**\\n * @notice internal helper function to calculate fee per token multiplier used in\\n * swap fee calculations\\n * @param swapFee swap fee for the tokens\\n * @param numTokens number of tokens pooled\\n */\\n function _feePerToken(uint256 swapFee, uint256 numTokens) internal pure returns (uint256) {\\n return (swapFee * numTokens) / ((numTokens - 1) * 4);\\n }\\n\\n /*** STATE MODIFYING FUNCTIONS ***/\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swap(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"swap more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dy the amount of tokens the user wants to buy\\n * @param maxDx the max amount the user would like to send.\\n * @return amount of token user have to transfer on swap\\n */\\n function swapOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\">pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n {\\n IERC20 tokenFrom = self.pooledTokens[tokenIndexFrom];\\n require(dx <= tokenFrom.balanceOf(msg.sender), \\\"more than you own\\\");\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(tokenFrom), dx);\\n }\\n\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndexTo]), msg.sender, dy);\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice swap two tokens in the pool internally\\n * @param self Swap struct to read from and write to\\n * @param tokenIndexFrom the token the user wants to sell\\n * @param tokenIndexTo the token the user wants to buy\\n * @param dx the amount of tokens the user wants to sell\\n * @param minDy the min amount the user would like to receive, or revert.\\n * @return amount of token user received on swap\\n */\\n function swapInternal(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dx,\\n uint256 minDy\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dx <= self.balances[tokenIndexFrom], \\\"more than pool balance\\\");\\n\\n uint256 dy;\\n uint256 dyFee;\\n uint256[] memory balances = self.balances;\\n (dy, dyFee) = _calculateSwap(self, tokenIndexFrom, tokenIndexTo, dx, balances);\\n require(dy >= minDy, \\\"dy < minDy\\\");\\n\\n uint256 dyAdminFee = (dyFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexTo];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy - dyAdminFee;\\n\\n if (dyAdminFee != 0) {\\n self.adminFees[tokenIndexTo] = self.adminFees[tokenIndexTo] + dyAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Should get exact amount out of AMM for asset put in\\n */\\n function swapInternalOut(\\n Swap storage self,\\n uint8 tokenIndexFrom,\\n uint8 tokenIndexTo,\\n uint256 dy,\\n uint256 maxDx\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n require(dy <= self.balances[tokenIndexTo], \\\"more than pool balance\\\");\\n\\n uint256 dx;\\n uint256 dxFee;\\n uint256[] memory balances = self.balances;\\n (dx, dxFee) = _calculateSwapInv(self, tokenIndexFrom, tokenIndexTo, dy, balances);\\n require(dx <= maxDx, \\\"dx > maxDx\\\");\\n\\n uint256 dxAdminFee = (dxFee * self.adminFee) /\\n Constants.FEE_DENOMINATOR /\\n self.tokenPrecisionMultipliers[tokenIndexFrom];\\n\\n self.balances[tokenIndexFrom] = balances[tokenIndexFrom] + dx - dxAdminFee;\\n self.balances[tokenIndexTo] = balances[tokenIndexTo] - dy;\\n\\n if (dxAdminFee != 0) {\\n self.adminFees[tokenIndexFrom] = self.adminFees[tokenIndexFrom] + dxAdminFee;\\n }\\n\\n emit TokenSwap(self.key, msg.sender, dx, dy, tokenIndexFrom, tokenIndexTo);\\n\\n return dx;\\n }\\n\\n /**\\n * @notice Add liquidity to the pool\\n * @param self Swap struct to read from and write to\\n * @param amounts the amounts of each token to add, in their native precision\\n * @param minToMint the minimum LP tokens adding this amount of liquidity\\n * should mint, otherwise revert. Handy for front-running mitigation\\n * allowed addresses. If the pool is not in the guarded launch phase, this parameter will be ignored.\\n * @return amount of LP token user received\\n */\\n function addLiquidity(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 minToMint\\n ) internal returns (uint256) {\\n require(!self.disabled, \\\"disabled pool\\\");\\n\\n uint256 numTokens = self.pooledTokens.length;\\n require(amounts.length == numTokens, \\\"mismatch pooled tokens\\\");\\n\\n // current state\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n if (v.totalSupply != 0) {\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n }\\n\\n uint256[] memory newBalances = new uint256[](numTokens);\\n\\n for (uint256 i; i < numTokens; ) {\\n require(v.totalSupply != 0 || amounts[i] != 0, \\\"!supply all tokens\\\");\\n\\n // Transfer tokens first to see if a fee was charged on transfer\\n if (amounts[i] != 0) {\\n IERC20 token = self.pooledTokens[i];\\n // Reverts for fee on transfer\\n AssetLogic.handleIncomingAsset(address(token), amounts[i]);\\n }\\n\\n newBalances[i] = v.balances[i] + amounts[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // invariant after change\\n v.d1 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n require(v.d1 > v.d0, \\\"D should increase\\\");\\n\\n // updated to reflect fees and calculate the user's LP tokens\\n v.d2 = v.d1;\\n uint256[] memory fees = new uint256[](numTokens);\\n\\n if (v.totalSupply != 0) {\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n for (uint256 i; i < numTokens; ) {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n fees[i] = (feePerToken * (idealBalance.difference(newBalances[i]))) / Constants.FEE_DENOMINATOR;\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = newBalances[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n newBalances[i] = newBalances[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n v.d2 = getD(_xp(newBalances, v.multipliers), v.preciseA);\\n } else {\\n // the initial depositor doesn't pay fees\\n self.balances = newBalances;\\n }\\n\\n uint256 toMint;\\n if (v.totalSupply == 0) {\\n toMint = v.d1;\\n } else {\\n toMint = ((v.d2 - v.d0) * v.totalSupply) / v.d0;\\n }\\n\\n require(toMint >= minToMint, \\\"mint < min\\\");\\n\\n // mint the user's LP tokens\\n v.lpToken.mint(msg.sender, toMint);\\n\\n emit AddLiquidity(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply + toMint);\\n\\n return toMint;\\n }\\n\\n /**\\n * @notice Burn LP tokens to remove liquidity from the pool.\\n * @dev Liquidity can always be removed, even when the pool is paused.\\n * @param self Swap struct to read from and write to\\n * @param amount the amount of LP tokens to burn\\n * @param minAmounts the minimum amounts of each token in the pool\\n * acceptable for this burn. Useful as a front-running mitigation\\n * @return amounts of tokens the user received\\n */\\n function removeLiquidity(\\n Swap storage self,\\n uint256 amount,\\n uint256[] calldata minAmounts\\n ) internal returns (uint256[] memory) {\\n LPToken lpToken = self.lpToken;\\n require(amount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(minAmounts.length == numTokens, \\\"mismatch poolTokens\\\");\\n\\n uint256[] memory balances = self.balances;\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n uint256[] memory amounts = _calculateRemoveLiquidity(balances, amount, totalSupply);\\n\\n uint256 numAmounts = amounts.length;\\n for (uint256 i; i < numAmounts; ) {\\n require(amounts[i] >= minAmounts[i], \\\"amounts[i] < minAmounts[i]\\\");\\n self.balances[i] = balances[i] - amounts[i];\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n lpToken.burnFrom(msg.sender, amount);\\n\\n emit RemoveLiquidity(self.key, msg.sender, amounts, totalSupply - amount);\\n\\n return amounts;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool all in one token.\\n * @param self Swap struct to read from and write to\\n * @param tokenAmount the amount of the lp tokens to burn\\n * @param tokenIndex the index of the token you want to receive\\n * @param minAmount the minimum amount to withdraw, otherwise revert\\n * @return amount chosen token that user received\\n */\\n function removeLiquidityOneToken(\\n Swap storage self,\\n uint256 tokenAmount,\\n uint8 tokenIndex,\\n uint256 minAmount\\n ) internal returns (uint256) {\\n LPToken lpToken = self.lpToken;\\n\\n require(tokenAmount <= lpToken.balanceOf(msg.sender), \\\">LP.balanceOf\\\");\\n uint256 numTokens = self.pooledTokens.length;\\n require(tokenIndex < numTokens, \\\"not found\\\");\\n\\n uint256 totalSupply = lpToken.totalSupply();\\n\\n (uint256 dy, uint256 dyFee) = _calculateWithdrawOneToken(self, tokenAmount, tokenIndex, totalSupply);\\n\\n require(dy >= minAmount, \\\"dy < minAmount\\\");\\n\\n uint256 adminFee = (dyFee * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[tokenIndex] = self.balances[tokenIndex] - (dy + adminFee);\\n if (adminFee != 0) {\\n self.adminFees[tokenIndex] = self.adminFees[tokenIndex] + adminFee;\\n }\\n lpToken.burnFrom(msg.sender, tokenAmount);\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[tokenIndex]), msg.sender, dy);\\n\\n emit RemoveLiquidityOne(self.key, msg.sender, tokenAmount, totalSupply, tokenIndex, dy);\\n\\n return dy;\\n }\\n\\n /**\\n * @notice Remove liquidity from the pool, weighted differently than the\\n * pool's current balances.\\n *\\n * @param self Swap struct to read from and write to\\n * @param amounts how much of each token to withdraw\\n * @param maxBurnAmount the max LP token provider is willing to pay to\\n * remove liquidity. Useful as a front-running mitigation.\\n * @return actual amount of LP tokens burned in the withdrawal\\n */\\n function removeLiquidityImbalance(\\n Swap storage self,\\n uint256[] memory amounts,\\n uint256 maxBurnAmount\\n ) internal returns (uint256) {\\n ManageLiquidityInfo memory v = ManageLiquidityInfo(\\n 0,\\n 0,\\n 0,\\n _getAPrecise(self),\\n self.lpToken,\\n 0,\\n self.balances,\\n self.tokenPrecisionMultipliers\\n );\\n v.totalSupply = v.lpToken.totalSupply();\\n\\n uint256 numTokens = self.pooledTokens.length;\\n uint256 numAmounts = amounts.length;\\n require(numAmounts == numTokens, \\\"mismatch pool tokens\\\");\\n\\n require(maxBurnAmount <= v.lpToken.balanceOf(msg.sender) && maxBurnAmount != 0, \\\">LP.balanceOf\\\");\\n\\n uint256 feePerToken = _feePerToken(self.swapFee, numTokens);\\n uint256[] memory fees = new uint256[](numTokens);\\n {\\n uint256[] memory balances1 = new uint256[](numTokens);\\n v.d0 = getD(_xp(v.balances, v.multipliers), v.preciseA);\\n for (uint256 i; i < numTokens; ) {\\n require(v.balances[i] >= amounts[i], \\\"withdraw more than available\\\");\\n\\n unchecked {\\n balances1[i] = v.balances[i] - amounts[i];\\n ++i;\\n }\\n }\\n v.d1 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n\\n for (uint256 i; i < numTokens; ) {\\n {\\n uint256 idealBalance = (v.d1 * v.balances[i]) / v.d0;\\n uint256 difference = idealBalance.difference(balances1[i]);\\n fees[i] = (feePerToken * difference) / Constants.FEE_DENOMINATOR;\\n }\\n uint256 adminFee = (fees[i] * self.adminFee) / Constants.FEE_DENOMINATOR;\\n self.balances[i] = balances1[i] - adminFee;\\n self.adminFees[i] = self.adminFees[i] + adminFee;\\n balances1[i] = balances1[i] - fees[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n v.d2 = getD(_xp(balances1, v.multipliers), v.preciseA);\\n }\\n uint256 tokenAmount = ((v.d0 - v.d2) * v.totalSupply) / v.d0;\\n require(tokenAmount != 0, \\\"!zero amount\\\");\\n tokenAmount = tokenAmount + 1;\\n\\n require(tokenAmount <= maxBurnAmount, \\\"tokenAmount > maxBurnAmount\\\");\\n\\n v.lpToken.burnFrom(msg.sender, tokenAmount);\\n\\n for (uint256 i; i < numTokens; ) {\\n AssetLogic.handleOutgoingAsset(address(self.pooledTokens[i]), msg.sender, amounts[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit RemoveLiquidityImbalance(self.key, msg.sender, amounts, fees, v.d1, v.totalSupply - tokenAmount);\\n\\n return tokenAmount;\\n }\\n\\n /**\\n * @notice withdraw all admin fees to a given address\\n * @param self Swap struct to withdraw fees from\\n * @param to Address to send the fees to\\n */\\n function withdrawAdminFees(Swap storage self, address to) internal {\\n uint256 numTokens = self.pooledTokens.length;\\n for (uint256 i; i < numTokens; ) {\\n IERC20 token = self.pooledTokens[i];\\n uint256 balance = self.adminFees[i];\\n if (balance != 0) {\\n delete self.adminFees[i];\\n AssetLogic.handleOutgoingAsset(address(token), to, balance);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @notice Sets the admin fee\\n * @dev adminFee cannot be higher than 100% of the swap fee\\n * @param self Swap struct to update\\n * @param newAdminFee new admin fee to be applied on future transactions\\n */\\n function setAdminFee(Swap storage self, uint256 newAdminFee) internal {\\n require(newAdminFee < Constants.MAX_ADMIN_FEE + 1, \\\"too high\\\");\\n self.adminFee = newAdminFee;\\n\\n emit NewAdminFee(self.key, newAdminFee);\\n }\\n\\n /**\\n * @notice update the swap fee\\n * @dev fee cannot be higher than 1% of each swap\\n * @param self Swap struct to update\\n * @param newSwapFee new swap fee to be applied on future transactions\\n */\\n function setSwapFee(Swap storage self, uint256 newSwapFee) internal {\\n require(newSwapFee < Constants.MAX_SWAP_FEE + 1, \\\"too high\\\");\\n self.swapFee = newSwapFee;\\n\\n emit NewSwapFee(self.key, newSwapFee);\\n }\\n\\n /**\\n * @notice Check if this stableswap pool exists and is valid (i.e. has been\\n * initialized and tokens have been added).\\n * @return bool true if this stableswap pool is valid, false if not.\\n */\\n function exists(Swap storage self) internal view returns (bool) {\\n return !self.disabled && self.pooledTokens.length != 0;\\n }\\n}\\n\",\"keccak256\":\"0xfe4b0ca8d2451904ec38f94a5adbb09ab792df3ba06191356768a83e0106e497\",\"license\":\"UNLICENSED\"},\"contracts/core/connext/libraries/TokenId.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n// ============= Structs =============\\n\\n// Tokens are identified by a TokenId:\\n// domain - 4 byte chain ID of the chain from which the token originates\\n// id - 32 byte identifier of the token address on the origin chain, in that chain's address format\\nstruct TokenId {\\n uint32 domain;\\n bytes32 id;\\n}\\n\",\"keccak256\":\"0xc38a47e9bb03aa551a59776362699cff34b19468988cb4614a0b943f29e0cad9\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/MerkleTreeManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnableUpgradeable} from \\\"../shared/ProposedOwnableUpgradeable.sol\\\";\\nimport {MerkleLib} from \\\"./libraries/MerkleLib.sol\\\";\\n\\n/**\\n * @title MerkleTreeManager\\n * @notice Contains a Merkle tree instance and exposes read/write functions for the tree.\\n * @dev On the hub domain there are two MerkleTreeManager contracts, one for the hub and one for the MainnetSpokeConnector.\\n */\\ncontract MerkleTreeManager is ProposedOwnableUpgradeable {\\n // ========== Custom Errors ===========\\n\\n error MerkleTreeManager__renounceOwnership_prohibited();\\n error MerkleTreeManager__setArborist_zeroAddress();\\n error MerkleTreeManager__setArborist_alreadyArborist();\\n\\n // ============ Events ============\\n\\n event ArboristUpdated(address previous, address updated);\\n\\n event LeafInserted(bytes32 root, uint256 count, bytes32 leaf);\\n\\n event LeavesInserted(bytes32 root, uint256 count, bytes32[] leaves);\\n\\n // ============ Structs ============\\n\\n // Status of Message:\\n // 0 - None - message has not been proven or processed\\n // 1 - Proven - message inclusion proof has been validated\\n // 2 - Processed - message has been dispatched to recipient\\n enum LeafStatus {\\n None,\\n Proven,\\n Processed\\n }\\n\\n // ============ Libraries ============\\n\\n using MerkleLib for MerkleLib.Tree;\\n\\n // ============ Public Storage ============\\n\\n /**\\n * @notice Core data structure with which this contract is tasked with keeping custody.\\n * Writable only by the designated arborist.\\n */\\n MerkleLib.Tree public tree;\\n\\n /**\\n * @notice The arborist contract that has permission to write to this tree.\\n * @dev This could be the root manager contract or a spoke connector contract, for example.\\n */\\n address public arborist;\\n\\n /**\\n * @notice The leaves that are proven already\\n */\\n mapping(bytes32 => LeafStatus) public leaves;\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n mapping(uint32 => uint32) public nonces;\\n\\n // ============ Modifiers ============\\n\\n modifier onlyArborist() {\\n require(arborist == msg.sender, \\\"!arborist\\\");\\n _;\\n }\\n\\n // ============ Getters ============\\n\\n /**\\n * @notice Returns the current branch.\\n */\\n function branch() public view returns (bytes32[32] memory) {\\n return tree.branch;\\n }\\n\\n /**\\n * @notice Calculates and returns the current root.\\n */\\n function root() public view returns (bytes32) {\\n return tree.root();\\n }\\n\\n /**\\n * @notice Returns the number of inserted leaves in the tree (current index).\\n */\\n function count() public view returns (uint256) {\\n return tree.count;\\n }\\n\\n /**\\n * @notice Convenience getter: returns the root and count.\\n */\\n function rootAndCount() public view returns (bytes32, uint256) {\\n return (tree.root(), tree.count);\\n }\\n\\n // ======== Initializer =========\\n\\n function initialize(address _arborist) public initializer {\\n __MerkleTreeManager_init(_arborist);\\n __ProposedOwnable_init();\\n }\\n\\n /**\\n * @dev Initializes MerkleTreeManager instance. Sets the msg.sender as the initial permissioned\\n */\\n function __MerkleTreeManager_init(address _arborist) internal onlyInitializing {\\n __MerkleTreeManager_init_unchained(_arborist);\\n }\\n\\n function __MerkleTreeManager_init_unchained(address _arborist) internal onlyInitializing {\\n arborist = _arborist;\\n }\\n\\n // ============ Admin Functions ==============\\n\\n /**\\n * @notice Method for the current arborist to assign write permissions to a new arborist.\\n * @param newArborist The new address to set as the current arborist.\\n */\\n function setArborist(address newArborist) external onlyOwner {\\n if (newArborist == address(0)) revert MerkleTreeManager__setArborist_zeroAddress();\\n address current = arborist;\\n if (current == newArborist) revert MerkleTreeManager__setArborist_alreadyArborist();\\n\\n // Emit updated event\\n emit ArboristUpdated(current, newArborist);\\n\\n arborist = newArborist;\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as there is a possibility the\\n * arborist may change.\\n */\\n function renounceOwnership() public virtual override onlyOwner {\\n revert MerkleTreeManager__renounceOwnership_prohibited();\\n }\\n\\n // ========= Public Functions =========\\n\\n /**\\n * @notice Used to increment nonce\\n * @param _domain The domain the nonce will be used for\\n * @return _nonce The incremented nonce\\n */\\n function incrementNonce(uint32 _domain) public onlyArborist returns (uint32 _nonce) {\\n _nonce = nonces[_domain]++;\\n }\\n\\n /**\\n * @notice Used to track proven leaves\\n * @param _leaf The leaf to mark as proven\\n */\\n function markAsProven(bytes32 _leaf) public onlyArborist {\\n require(leaves[_leaf] == LeafStatus.None, \\\"!empty\\\");\\n leaves[_leaf] = LeafStatus.Proven;\\n }\\n\\n /**\\n * @notice Used to track processed leaves\\n * @param _leaf The leaf to mark as proven\\n */\\n function markAsProcessed(bytes32 _leaf) public onlyArborist {\\n require(leaves[_leaf] == LeafStatus.Proven, \\\"!proven\\\");\\n leaves[_leaf] = LeafStatus.Processed;\\n }\\n\\n /**\\n * @notice Inserts the given leaves into the tree.\\n * @param _leaves The leaves to be inserted into the tree.\\n * @return _root Current root for convenience.\\n * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n * provided for convenience.\\n */\\n function insert(bytes32[] memory _leaves) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n // For > 1 leaf, considerably more efficient to put this tree into memory, conduct operations,\\n // then re-assign it to storage - *especially* if we have multiple leaves to insert.\\n MerkleLib.Tree memory _tree = tree;\\n\\n uint256 leafCount = _leaves.length;\\n for (uint256 i; i < leafCount; ) {\\n // Insert the new node (using in-memory method).\\n _tree = _tree.insert(_leaves[i]);\\n unchecked {\\n ++i;\\n }\\n }\\n // Write the newly updated tree to storage.\\n tree = _tree;\\n\\n // Get return details for convenience.\\n _count = _tree.count;\\n // NOTE: Root calculation method currently reads from storage only.\\n _root = tree.root();\\n\\n emit LeavesInserted(_root, _count, _leaves);\\n }\\n\\n /**\\n * @notice Inserts the given leaf into the tree.\\n * @param leaf The leaf to be inserted into the tree.\\n * @return _root Current root for convenience.\\n * @return _count Current node count (i.e. number of indices) AFTER the insertion of the new leaf,\\n * provided for convenience.\\n */\\n function insert(bytes32 leaf) public onlyArborist returns (bytes32 _root, uint256 _count) {\\n // Insert the new node.\\n tree = tree.insert(leaf);\\n _count = tree.count;\\n _root = tree.root();\\n\\n emit LeafInserted(_root, _count, leaf);\\n }\\n\\n // ============ Upgrade Gap ============\\n uint256[46] private __GAP; // gap for upgrade safety\\n}\\n\",\"keccak256\":\"0x6c85e8e6df2192fd4d8099efbbb8b3ff40211b777174a99abe5e6d60f9529a3c\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/RootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Address} from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\nimport {IRootManager} from \\\"./interfaces/IRootManager.sol\\\";\\nimport {IHubConnector} from \\\"./interfaces/IHubConnector.sol\\\";\\nimport {QueueLib} from \\\"./libraries/Queue.sol\\\";\\nimport {DomainIndexer} from \\\"./libraries/DomainIndexer.sol\\\";\\nimport {SnapshotId} from \\\"./libraries/SnapshotId.sol\\\";\\n\\nimport {MerkleTreeManager} from \\\"./MerkleTreeManager.sol\\\";\\nimport {WatcherClient} from \\\"./WatcherClient.sol\\\";\\n\\nimport {IHubSpokeConnector} from \\\"./interfaces/IHubSpokeConnector.sol\\\";\\n\\n/**\\n * @notice This contract exists at cluster hubs, and aggregates all transfer roots from messaging\\n * spokes into a single merkle tree. Regularly broadcasts the root of the aggregator tree back out\\n * to all the messaging spokes.\\n */\\ncontract RootManager is ProposedOwnable, IRootManager, WatcherClient, DomainIndexer {\\n // ============ Libraries ============\\n\\n using QueueLib for QueueLib.Queue;\\n\\n // ============ Events ============\\n\\n event DelayBlocksUpdated(uint256 previous, uint256 updated);\\n\\n event DisputeBlocksUpdated(uint256 previous, uint256 updated);\\n\\n event MinDisputeBlocksUpdated(uint256 previous, uint256 updated);\\n\\n event RootReceived(uint32 domain, bytes32 receivedRoot, uint256 queueIndex);\\n\\n event RootDiscarded(bytes32 fraudulentRoot);\\n\\n /**\\n * @notice Emitted when a new proposer is added\\n * @param proposer The address of the proposer\\n */\\n event ProposerAdded(address indexed proposer);\\n\\n /**\\n * @notice Emitted when a proposer is removed\\n * @param proposer The address of the proposer\\n */\\n event ProposerRemoved(address indexed proposer);\\n\\n event ConnectorAdded(uint32 domain, address connector, uint32[] domains, address[] connectors);\\n\\n event ConnectorRemoved(uint32 domain, address connector, uint32[] domains, address[] connectors, address caller);\\n\\n event PropagateFailed(uint32 domain, address connector);\\n\\n /**\\n * @notice Emitted when slow mode is activated\\n * @param watcher The address of the watcher who called the function\\n */\\n event SlowModeActivated(address indexed watcher);\\n\\n /**\\n * @notice Emitted when optimistic mode is activated\\n */\\n event OptimisticModeActivated();\\n\\n /**\\n * @notice Emitted when a root is propagated\\n * @dev It doesnt matter if the root was generated optimistically or on-chain.\\n * @param aggregateRoot The aggregate root propagated\\n * @param domainsHash The current domain hash\\n */\\n event AggregateRootPropagated(bytes32 indexed aggregateRoot, bytes32 domainsHash);\\n\\n /**\\n * @notice Emitted when a new aggregate root is proposed\\n * @param snapshotId The snapshot id\\n * @param endOfDispute The block at which the dispute period is over\\n * @param aggregateRoot The new aggregate root proposed\\n * @param baseRoot The root of the tree before the snapshot roots were inserted by proposer\\n * @param snapshotsRoots The list of roots added to aggregate tree\\n * @param domains The list of all domains\\n */\\n event AggregateRootProposed(\\n uint256 indexed snapshotId,\\n uint256 endOfDispute,\\n bytes32 indexed aggregateRoot,\\n bytes32 indexed baseRoot,\\n bytes32[] snapshotsRoots,\\n uint32[] domains\\n );\\n\\n /**\\n * @notice Emitted when an aggregate root is added to the validAggregateRoots map during optimistic mode.\\n * @param aggregateRoot The saved aggregate root\\n * @param rootTimestamp The timestamp at which the aggregate root was saved.\\n */\\n event AggregateRootSavedOptimistic(bytes32 indexed aggregateRoot, uint256 rootTimestamp);\\n\\n /**\\n * @notice Emitted when an aggregate root is added to the validAggregateRoots map during slow mode.\\n * @param aggregateRoot The saved aggregate root\\n * @param leafCount The new number of leaves in the tree.\\n * @param aggregatedRoots The verified inbound roots inserted in the tree.\\n * @param rootTimestamp The timestamp at which the aggregate root was saved.\\n */\\n event AggregateRootSavedSlow(\\n bytes32 indexed aggregateRoot,\\n uint256 leafCount,\\n bytes32[] aggregatedRoots,\\n uint256 rootTimestamp\\n );\\n\\n /**\\n * @notice Emitted when a domain is set as the hub domain.\\n * @param domain The domain set as hub domain.\\n */\\n event HubDomainSet(uint32 domain);\\n\\n /**\\n * @notice Emitted when the previously set hub domain is cleared.\\n */\\n event HubDomainCleared();\\n\\n // ============ Errors ============\\n\\n error RootManager_proposeAggregateRoot__InvalidSnapshotId(uint256 snapshotId);\\n\\n error RootManager_checkDomains__InvalidDomains();\\n\\n error RootManager_finalize__InvalidAggregateRoot();\\n\\n error RootManager_onlyOptimisticMode__SlowModeOn();\\n\\n error RootManager_activateOptimisticMode__OptimisticModeOn();\\n\\n error RootManager_aggregate__OptimisticModeOn();\\n\\n error RootManager_proposeAggregateRoot__ProposeInProgress();\\n\\n error RootManager_finalize__ProposeInProgress();\\n\\n error RootManager_onlyProposer__NotWhitelistedProposer(address caller);\\n\\n error RootManager_sendRootToHub__NoMessageSent();\\n\\n error RootManager_finalize__InvalidInputHash();\\n\\n error RootManager_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore();\\n\\n error RootManager_setDisputeBlocks__SameDisputeBlocksAsBefore();\\n\\n error RootManager_setDisputeBlocks__DisputeBlocksLowerThanMin();\\n\\n error RootManager_constructor__DisputeBlocksLowerThanMin();\\n\\n error RootManager__renounceOwnership_prohibited();\\n\\n error RootManager_propagate__AggregateRootIsZero();\\n\\n error RootManager_setHubDomain__InvalidDomain();\\n\\n // ============ Properties ============\\n\\n /**\\n * @notice Maximum number of values to dequeue from the queue in one sitting (one call of `propagate`\\n * or `dequeue`). Used to cap gas requirements.\\n */\\n uint128 public constant DEQUEUE_MAX = 100;\\n\\n /**\\n * @notice Root used to keep the slots of proposedAggregateRootHash warm.\\n */\\n bytes32 public constant FINALIZED_HASH = 0x0000000000000000000000000000000000000000000000000000000000000001;\\n /**\\n * @notice Number of blocks to delay the processing of a message to allow for watchers to verify\\n * the validity and pause if necessary.\\n */\\n uint256 public delayBlocks;\\n\\n /**\\n * @notice The number of blocks watchers have to detect and invalidate the proposed root.\\n */\\n uint256 public disputeBlocks;\\n\\n /**\\n * @notice The minimum number of blocks disputeBlocks can be set to.\\n */\\n uint256 public minDisputeBlocks;\\n\\n /**\\n * @notice True if the system is working in optimistic mode. Otherwise is working in slow mode\\n */\\n bool public optimisticMode;\\n\\n /**\\n * @notice The last aggregate root we propagated to spoke chains (mapping keyed on domain). Used to prevent sending redundant\\n * aggregate roots in `propagate`.\\n */\\n mapping(uint32 => bytes32) public lastPropagatedRoot;\\n\\n /**\\n * @notice Queue used for management of verification for inbound roots from spoke chains. Once\\n * the verification period elapses, the inbound messages can be aggregated into the merkle tree\\n * for propagation to spoke chains.\\n * @dev Watchers should be able to watch this queue for fraudulent messages and pause this contract\\n * if fraud is detected.\\n */\\n QueueLib.Queue public pendingInboundRoots;\\n\\n /**\\n * @notice The resulting hash of keccaking the proposed aggregate root and the block at which its dispute ends.\\n * @dev Set to 0x1 to prevent someone from calling finalize() the moment the contract is deployed\\n */\\n bytes32 public proposedAggregateRootHash = 0x0000000000000000000000000000000000000000000000000000000000000001;\\n\\n /**\\n * @notice MerkleTreeManager contract instance. Will hold the active tree of aggregated inbound roots.\\n * The root of this tree will be distributed crosschain to all spoke domains.\\n */\\n MerkleTreeManager public immutable MERKLE;\\n\\n /**\\n * @notice This is used for the `onlyProposers` modifier, which gates who\\n * can propose new roots using `proposeAggregateRoot`.\\n */\\n mapping(address => bool) public allowlistedProposers;\\n\\n /**\\n * @notice The list of valid aggregate roots for a given timestamp.\\n * @dev Each time a new aggregate root is generated or\\n * finalized, it will be added to this mapping using the block.timestamp as key.\\n * @dev This is only used as Data-Availability for off-chain agents. Especially for the Watchers that fetch the\\n * correct aggregate root from this contract in order to verify the data proposed on the Spoke Connectors.\\n * @dev rootTimestamp => aggregateRoot\\n */\\n mapping(uint256 => bytes32) public validAggregateRoots;\\n\\n /**\\n * @notice Timestamp of the last aggregate root saved.\\n * @dev Used to ensure that the propagate function will send the latest aggregate root available.\\n */\\n uint256 public lastSavedAggregateRootTimestamp;\\n\\n /**\\n * @notice Domain id of the current network\\n */\\n uint32 public hubDomain;\\n\\n // ============ Modifiers ============\\n\\n modifier onlyConnector(uint32 _domain) {\\n require(getConnectorForDomain(_domain) == msg.sender, \\\"!connector\\\");\\n _;\\n }\\n\\n /**\\n * @notice Checks if the proposed domains are valid\\n */\\n modifier checkDomains(uint32[] calldata _domains) {\\n if (keccak256(abi.encode(_domains)) != domainsHash) revert RootManager_checkDomains__InvalidDomains();\\n _;\\n }\\n\\n /**\\n * @notice Checks if root manager is working in optimistic mode\\n */\\n modifier onlyOptimisticMode() {\\n if (!optimisticMode) revert RootManager_onlyOptimisticMode__SlowModeOn();\\n _;\\n }\\n\\n /**\\n * @notice Checks if the proposer is in the allow list\\n */\\n modifier onlyProposer() {\\n if (!allowlistedProposers[msg.sender]) revert RootManager_onlyProposer__NotWhitelistedProposer(msg.sender);\\n _;\\n }\\n\\n // ============ Constructor ============\\n\\n /**\\n * @notice Creates a new RootManager instance.\\n * @param _delayBlocks The delay for the validation period for incoming messages in blocks.\\n * @param _merkle The address of the MerkleTreeManager on this domain.\\n * @param _watcherManager The address of the WatcherManager on this domain.\\n */\\n constructor(\\n uint256 _delayBlocks,\\n address _merkle,\\n address _watcherManager,\\n uint256 _minDisputeBlocks,\\n uint256 _disputeBlocks\\n ) ProposedOwnable() WatcherClient(_watcherManager) {\\n _setOwner(msg.sender);\\n if (_disputeBlocks < _minDisputeBlocks) revert RootManager_constructor__DisputeBlocksLowerThanMin();\\n require(_merkle != address(0), \\\"!zero merkle\\\");\\n MERKLE = MerkleTreeManager(_merkle);\\n\\n delayBlocks = _delayBlocks;\\n minDisputeBlocks = _minDisputeBlocks;\\n disputeBlocks = _disputeBlocks;\\n\\n // Initialize pending inbound root queue.\\n pendingInboundRoots.initialize();\\n }\\n\\n // ================ Getters ================\\n\\n function getPendingInboundRootsCount() public view returns (uint256) {\\n return pendingInboundRoots.length();\\n }\\n\\n /**\\n * @notice Get the duration of the snapshot\\n *\\n * @return _snapshotDuration The duration of the snapshot\\n */\\n function getSnapshotDuration() external pure returns (uint256 _snapshotDuration) {\\n _snapshotDuration = SnapshotId.SNAPSHOT_DURATION;\\n }\\n\\n // ============ Admin Functions ============\\n\\n /**\\n * @notice Adds a proposer to the allowlist.\\n * @dev Only allowlisted proposers can call `proposeAggregateRoot`.\\n */\\n function addProposer(address _proposer) external onlyOwner {\\n allowlistedProposers[_proposer] = true;\\n emit ProposerAdded(_proposer);\\n }\\n\\n /**\\n * @notice Removes a proposer from the allowlist.\\n * @dev Only allowlisted proposers can call `proposeAggregateRoot`.\\n */\\n function removeProposer(address _proposer) external onlyOwner {\\n delete allowlistedProposers[_proposer];\\n emit ProposerRemoved(_proposer);\\n }\\n\\n /**\\n * @notice Set the `minDisputeBlocks` variable to the provided parameter.\\n */\\n function setMinDisputeBlocks(uint256 _minDisputeBlocks) external onlyOwner {\\n if (_minDisputeBlocks == minDisputeBlocks) revert RootManager_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore();\\n emit MinDisputeBlocksUpdated(minDisputeBlocks, _minDisputeBlocks);\\n minDisputeBlocks = _minDisputeBlocks;\\n }\\n\\n /**\\n * @notice Set the `disputeBlocks`, the duration, in blocks, of the dispute process for\\n * a given proposed root\\n */\\n function setDisputeBlocks(uint256 _disputeBlocks) external onlyOwner {\\n if (_disputeBlocks < minDisputeBlocks) revert RootManager_setDisputeBlocks__DisputeBlocksLowerThanMin();\\n if (_disputeBlocks == disputeBlocks) revert RootManager_setDisputeBlocks__SameDisputeBlocksAsBefore();\\n emit DisputeBlocksUpdated(disputeBlocks, _disputeBlocks);\\n disputeBlocks = _disputeBlocks;\\n }\\n\\n /**\\n * @notice Set the `delayBlocks`, the period in blocks over which an incoming message\\n * is verified.\\n */\\n function setDelayBlocks(uint256 _delayBlocks) external onlyOwner {\\n require(_delayBlocks != delayBlocks, \\\"!delayBlocks\\\");\\n emit DelayBlocksUpdated(delayBlocks, _delayBlocks);\\n delayBlocks = _delayBlocks;\\n }\\n\\n /**\\n * @notice Add a new supported domain and corresponding hub connector to the system. This new domain\\n * will receive the propagated aggregate root.\\n * @dev Only owner can add a new connector. Address should be the connector on L1.\\n * @dev Cannot add address(0) to avoid duplicated domain in array and reduce gas fee while propagating.\\n *\\n * @param _domain The target spoke domain of the given connector.\\n * @param _connector Address of the hub connector.\\n */\\n function addConnector(uint32 _domain, address _connector) external onlyOwner {\\n addDomain(_domain, _connector);\\n emit ConnectorAdded(_domain, _connector, domains, connectors);\\n }\\n\\n /**\\n * @notice Remove support for a connector and respective domain. That connector/domain will no longer\\n * receive updates for the latest aggregate root.\\n * @dev Only watcher can remove a connector.\\n * @dev The proposedAggregateRootHash will be set to the FINALIZED_HASH.\\n * TODO: Could add a metatx-able `removeConnectorWithSig` if we want to use relayers?\\n *\\n * @param _domain The spoke domain of the target connector we want to remove.\\n */\\n function removeConnector(uint32 _domain) external onlyWatcher {\\n address _connector = removeDomain(_domain);\\n proposedAggregateRootHash = FINALIZED_HASH;\\n emit ConnectorRemoved(_domain, _connector, domains, connectors, msg.sender);\\n }\\n\\n /**\\n * @notice Removes (effectively blocklists) a given (fraudulent) root from the queue of pending\\n * inbound roots.\\n * @dev The given root does NOT have to currently be in the queue. It isn't removed from the queue\\n * directly, but instead is filtered out when dequeuing is done for the sake of aggregation.\\n * @dev Can only be called by the owner when the protocol is paused.\\n *\\n * @param _root The root to be discarded.\\n */\\n function discardRoot(bytes32 _root) external onlyOwner whenPaused {\\n pendingInboundRoots.remove(_root);\\n emit RootDiscarded(_root);\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as watchers can freely remove connectors\\n * and only the owner can add them back\\n */\\n function renounceOwnership() public virtual override(ProposedOwnable, WatcherClient) onlyOwner {\\n revert RootManager__renounceOwnership_prohibited();\\n }\\n\\n /**\\n * @notice Sets domain corresponding to the hub domain.\\n *\\n * @param _domain The domain to be set as hub domain.\\n */\\n function setHubDomain(uint32 _domain) external onlyOwner {\\n if (!isDomainSupported(_domain)) revert RootManager_setHubDomain__InvalidDomain();\\n hubDomain = _domain;\\n emit HubDomainSet(_domain);\\n }\\n\\n /**\\n * @notice Removes the domain associated with the hub domain.\\n */\\n function clearHubDomain() external onlyOwner {\\n delete hubDomain;\\n emit HubDomainCleared();\\n }\\n\\n // ============ Public Functions ============\\n\\n /**\\n * @notice Propose a new aggregate root\\n * @dev snapshotId, snapshotRoots and domains are needed for validation and data availability for off-chain agents.\\n * In the case of domains we need to check which are the current valid domains at the time of proposing.\\n * This is gonna be used by the off-chain scripts to know which domains to check when validating each proposition.\\n * This is to avoid problems if a new domain is added in the middle of an on-going propose.\\n * Domains should be in the same order as they are in this contract.\\n * Snapshot roots provided should be in order of insertion and should respect the domains order.\\n *\\n * @param _snapshotId The snapshot id used\\n * @param _aggregateRoot The new aggregate root\\n * @param _snapshotsRoots Array of snapshot roots inserted\\n * @param _domains Array of all the domains\\n */\\n function proposeAggregateRoot(\\n uint256 _snapshotId,\\n bytes32 _aggregateRoot,\\n bytes32[] calldata _snapshotsRoots,\\n uint32[] calldata _domains\\n ) external onlyProposer onlyOptimisticMode checkDomains(_domains) whenNotPaused {\\n if (_snapshotId != SnapshotId.getLastCompletedSnapshotId())\\n revert RootManager_proposeAggregateRoot__InvalidSnapshotId(_snapshotId);\\n if (proposedAggregateRootHash != FINALIZED_HASH) revert RootManager_proposeAggregateRoot__ProposeInProgress();\\n\\n uint256 _endOfDispute = block.number + disputeBlocks;\\n proposedAggregateRootHash = keccak256(abi.encode(_aggregateRoot, _endOfDispute));\\n\\n emit AggregateRootProposed(_snapshotId, _endOfDispute, _aggregateRoot, MERKLE.root(), _snapshotsRoots, _domains);\\n }\\n\\n /**\\n * @notice Finalizes the proposed aggregate root. This makes the current proposed root the new validated and\\n * ready to propagate root.\\n * @dev The system has to be in optimistic mode and propose's dispute time over.\\n * Finalized root will stop being monitored by off-chain agents.\\n *\\n * @param _proposedAggregateRoot The aggregate root currently proposed\\n * @param _endOfDispute The block in which the dispute period for proposedAggregateRootHash finalizes\\n */\\n function finalize(bytes32 _proposedAggregateRoot, uint256 _endOfDispute) public onlyOptimisticMode whenNotPaused {\\n bytes32 _proposedAggregateRootHash = proposedAggregateRootHash;\\n if (_proposedAggregateRootHash == FINALIZED_HASH) revert RootManager_finalize__InvalidAggregateRoot();\\n bytes32 _userInputHash = keccak256(abi.encode(_proposedAggregateRoot, _endOfDispute));\\n if (_userInputHash != _proposedAggregateRootHash) revert RootManager_finalize__InvalidInputHash();\\n if (_endOfDispute > block.number) revert RootManager_finalize__ProposeInProgress();\\n\\n // Save data\\n validAggregateRoots[block.timestamp] = _proposedAggregateRoot;\\n lastSavedAggregateRootTimestamp = block.timestamp;\\n\\n // Clear the propose slot\\n proposedAggregateRootHash = FINALIZED_HASH;\\n\\n emit AggregateRootSavedOptimistic(_proposedAggregateRoot, block.timestamp);\\n }\\n\\n /**\\n * @notice Unifies the flow of finalize and propagate.\\n * @dev Should be called by relayers only when proposed root is ready to be finalized.\\n *\\n * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n * used here to reduce gas costs, and keep them static regardless of number of supported domains.\\n * @param _fees Array of fees in native token for an AMB if required\\n * @param _encodedData Array of encodedData: extra params for each AMB if required\\n * @param _proposedAggregateRoot The aggregate root currently proposed\\n * @param _endOfDispute The block in which the dispute period for proposedAggregateRootHash finalizes\\n */\\n function finalizeAndPropagate(\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData,\\n bytes32 _proposedAggregateRoot,\\n uint256 _endOfDispute\\n ) external payable {\\n finalize(_proposedAggregateRoot, _endOfDispute);\\n propagate(_connectors, _fees, _encodedData);\\n }\\n\\n /**\\n * @notice This is called by relayers to take the current aggregate tree root and propagate it to all\\n * spoke domains (via their respective hub connectors).\\n * @dev Should be called by relayers at a regular interval.\\n * Workflow is slightly different depending on the mode the system is in.\\n *\\n * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n * used here to reduce gas costs, and keep them static regardless of number of supported domains.\\n * @param _fees Array of fees in native token for an AMB if required\\n * @param _encodedData Array of encodedData: extra params for each AMB if required\\n */\\n function propagate(\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData\\n ) public payable whenNotPaused {\\n validateConnectors(_connectors);\\n\\n uint256 _numDomains = _connectors.length;\\n // Sanity check: fees and encodedData lengths matches connectors length.\\n require(_fees.length == _numDomains && _encodedData.length == _numDomains, \\\"invalid lengths\\\");\\n\\n // If in slow mode, we dequeue to ensure that we add the inboundRoots that are ready.\\n if (!optimisticMode) dequeue();\\n\\n bytes32 _aggregateRoot = validAggregateRoots[lastSavedAggregateRootTimestamp];\\n\\n if (_aggregateRoot == 0) revert RootManager_propagate__AggregateRootIsZero();\\n\\n emit AggregateRootPropagated(_aggregateRoot, domainsHash);\\n\\n _sendRootToHubs(_aggregateRoot, _connectors, _fees, _encodedData);\\n }\\n\\n /**\\n * @notice Send an aggregate root to every connector.\\n * @dev CRITICAL: This function does NOT check if _connectors sent to it are correct or not and can always be called internally.\\n * All the needed checks must be done before calling this function.\\n *\\n * @param _aggregateRoot The aggregate root that needs to be sent to every connector.\\n * @param _connectors Array of connectors: should match exactly the array of `connectors` in storage;\\n * used here to reduce gas costs, and keep them static regardless of number of supported domains.\\n * @param _fees Array of fees in native token for an AMB if required\\n * @param _encodedData Array of encodedData: extra params for each AMB if required\\n */\\n function _sendRootToHubs(\\n bytes32 _aggregateRoot,\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData\\n ) internal {\\n uint256 refund = msg.value;\\n bool sent;\\n for (uint32 i; i < _connectors.length; ) {\\n // Sanity check: skip propagating a redundant aggregate root.\\n bytes32 previous = lastPropagatedRoot[domains[i]];\\n if (previous == _aggregateRoot) {\\n unchecked {\\n ++i;\\n }\\n continue;\\n }\\n\\n // Try to send the message with appropriate encoded data and fees\\n // Continue on revert, but emit an event\\n try\\n IHubConnector(_connectors[i]).sendMessage{value: _fees[i]}(abi.encodePacked(_aggregateRoot), _encodedData[i])\\n {\\n // NOTE: This will ensure there is sufficient msg.value for all fees before calling `sendMessage`\\n // This will revert as soon as there are insufficient fees for call i, even if call n > i has\\n // sufficient budget, this function will revert\\n refund -= _fees[i];\\n // mark that the message was sent\\n sent = true;\\n // Set the last propagated root\\n lastPropagatedRoot[domains[i]] = _aggregateRoot;\\n } catch {\\n emit PropagateFailed(domains[i], _connectors[i]);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n // Ensure *a* message was sent to prevent excess relayer spend\\n if (!sent) {\\n revert RootManager_sendRootToHub__NoMessageSent();\\n }\\n\\n // Refund caller\\n if (refund > 0) {\\n Address.sendValue(payable(msg.sender), refund);\\n }\\n }\\n\\n /**\\n * @notice Sends the latest valid aggregate root to the hub domain's spoke connector.\\n * @dev This has no guards as the guards should be in the spoke connector. For example, the spoke connector should\\n * guard against receiving the root through this function if the spoke connector is not in optimistic mode.\\n */\\n function sendRootToHubSpoke() external whenNotPaused {\\n bytes32 _aggregateRoot = validAggregateRoots[lastSavedAggregateRootTimestamp];\\n IHubSpokeConnector(getConnectorForDomain(hubDomain)).saveAggregateRoot(_aggregateRoot);\\n }\\n\\n /**\\n * @notice Accept an inbound root coming from a given domain's hub connector, enqueuing this incoming\\n * root into the current queue as it awaits the verification period.\\n * @dev The aggregate tree's root, which will include this inbound root, will be propagated to all spoke\\n * domains (via `propagate`) on a regular basis assuming the verification period is surpassed without\\n * dispute.\\n *\\n * @param _domain The source domain of the given root.\\n * @param _inbound The inbound root coming from the given domain.\\n */\\n function aggregate(uint32 _domain, bytes32 _inbound) external whenNotPaused onlyConnector(_domain) {\\n if (optimisticMode) revert RootManager_aggregate__OptimisticModeOn();\\n uint128 lastIndex = pendingInboundRoots.enqueue(_inbound);\\n emit RootReceived(_domain, _inbound, lastIndex);\\n }\\n\\n /**\\n * @notice Dequeue verified inbound roots and insert them into the aggregator tree.\\n * @dev Will dequeue a fixed maximum amount of roots to prevent out of gas errors. As such, this\\n * method is public and separate from `propagate` so we can curtail an overloaded queue as needed.\\n *\\n * @return bytes32 The new aggregate root.\\n * @return uint256 The updated count (number of leaves).\\n */\\n function dequeue() public whenNotPaused returns (bytes32, uint256) {\\n // Get all of the verified roots from the queue.\\n bytes32[] memory _verifiedInboundRoots = pendingInboundRoots.dequeueVerified(delayBlocks, DEQUEUE_MAX);\\n\\n // If there's nothing dequeued, just return the root and count.\\n if (_verifiedInboundRoots.length == 0) {\\n return MERKLE.rootAndCount();\\n }\\n\\n // Insert the leaves into the aggregator tree (method will also calculate and return the current\\n // aggregate root and count).\\n (bytes32 _aggregateRoot, uint256 _count) = MERKLE.insert(_verifiedInboundRoots);\\n\\n validAggregateRoots[block.timestamp] = _aggregateRoot;\\n lastSavedAggregateRootTimestamp = block.timestamp;\\n\\n emit AggregateRootSavedSlow(_aggregateRoot, _count, _verifiedInboundRoots, block.timestamp);\\n\\n return (_aggregateRoot, _count);\\n }\\n\\n /**\\n * @notice Watcher can set the system in slow mode.\\n * @dev Sets the proposed aggregate root hash to FINALIZED_HASH, invalidating it.\\n */\\n function activateSlowMode() external onlyWatcher onlyOptimisticMode {\\n optimisticMode = false;\\n\\n proposedAggregateRootHash = FINALIZED_HASH;\\n emit SlowModeActivated(msg.sender);\\n }\\n\\n /**\\n * @notice Owner can set the system to optimistic mode.\\n * @dev Elements in the queue will be discarded.\\n * To save gas we are not deleting the elements from the queue, but moving the last counter to first - 1\\n * so we can reassign new elements to those positions in the future.\\n * Discarded roots will be included on the upcoming optimistic aggregateRoot.\\n */\\n function activateOptimisticMode() external onlyOwner {\\n if (optimisticMode) revert RootManager_activateOptimisticMode__OptimisticModeOn();\\n\\n pendingInboundRoots.last = pendingInboundRoots.first - 1;\\n\\n optimisticMode = true;\\n emit OptimisticModeActivated();\\n }\\n}\\n\",\"keccak256\":\"0x3d000caf540675efcfac2d3c3701597e5a6731218f9f3b19c58b29cc4811566f\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherClient.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {Pausable} from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\nimport {WatcherManager} from \\\"./WatcherManager.sol\\\";\\n\\n/**\\n * @notice This contract abstracts the functionality of the watcher manager.\\n * Contracts can inherit this contract to be able to use the watcher manager's shared watcher set.\\n */\\n\\ncontract WatcherClient is ProposedOwnable, Pausable {\\n // ============ Events ============\\n /**\\n * @notice Emitted when the manager address changes\\n * @param watcherManager The updated manager\\n */\\n event WatcherManagerChanged(address watcherManager);\\n\\n // ============ Properties ============\\n /**\\n * @notice The `WatcherManager` contract governs the watcher allowlist.\\n * @dev Multiple clients can share a watcher set using the same manager\\n */\\n WatcherManager public watcherManager;\\n\\n // ============ Constructor ============\\n constructor(address _watcherManager) ProposedOwnable() {\\n watcherManager = WatcherManager(_watcherManager);\\n }\\n\\n // ============ Modifiers ============\\n /**\\n * @notice Enforces the sender is the watcher\\n */\\n modifier onlyWatcher() {\\n require(watcherManager.isWatcher(msg.sender), \\\"!watcher\\\");\\n _;\\n }\\n\\n // ============ Admin fns ============\\n /**\\n * @notice Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n */\\n function setWatcherManager(address _watcherManager) external onlyOwner {\\n require(_watcherManager != address(watcherManager), \\\"already watcher manager\\\");\\n watcherManager = WatcherManager(_watcherManager);\\n emit WatcherManagerChanged(_watcherManager);\\n }\\n\\n /**\\n * @notice Owner can unpause contracts if fraud is detected by watchers\\n */\\n function unpause() external onlyOwner whenPaused {\\n _unpause();\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as only the owner\\n * is able to unpause the contracts. You can still propose `address(0)`,\\n * but it will never be accepted.\\n */\\n function renounceOwnership() public virtual override onlyOwner {\\n require(false, \\\"prohibited\\\");\\n }\\n\\n // ============ Watcher fns ============\\n\\n /**\\n * @notice Watchers can pause contracts if fraud is detected\\n */\\n function pause() external onlyWatcher whenNotPaused {\\n _pause();\\n }\\n}\\n\",\"keccak256\":\"0xe9c9a71695f8c4b93d5d59b719f162c805cd85879aad5f4175b6fa7a3236df95\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/WatcherManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {ProposedOwnable} from \\\"../shared/ProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This contract manages a set of watchers. This is meant to be used as a shared resource that contracts can\\n * inherit to make use of the same watcher set.\\n */\\n\\ncontract WatcherManager is ProposedOwnable {\\n // ============ Events ============\\n event WatcherAdded(address watcher);\\n\\n event WatcherRemoved(address watcher);\\n\\n // ============ Properties ============\\n mapping(address => bool) public isWatcher;\\n\\n // ============ Constructor ============\\n constructor() ProposedOwnable() {\\n _setOwner(msg.sender);\\n }\\n\\n // ============ Modifiers ============\\n\\n // ============ Admin fns ============\\n /**\\n * @dev Owner can enroll a watcher (abilities are defined by inheriting contracts)\\n */\\n function addWatcher(address _watcher) external onlyOwner {\\n require(!isWatcher[_watcher], \\\"already watcher\\\");\\n isWatcher[_watcher] = true;\\n emit WatcherAdded(_watcher);\\n }\\n\\n /**\\n * @dev Owner can unenroll a watcher (abilities are defined by inheriting contracts)\\n */\\n function removeWatcher(address _watcher) external onlyOwner {\\n require(isWatcher[_watcher], \\\"!exist\\\");\\n delete isWatcher[_watcher];\\n emit WatcherRemoved(_watcher);\\n }\\n\\n /**\\n * @notice Remove ability to renounce ownership\\n * @dev Renounce ownership should be impossible as long as the watcher griefing\\n * vector exists. You can still propose `address(0)`, but it will never be accepted.\\n */\\n function renounceOwnership() public virtual override onlyOwner {\\n require(false, \\\"prohibited\\\");\\n }\\n}\\n\",\"keccak256\":\"0x31457ca4d8f4f3270d6cc85e049f2ebf134bd094c995ad0856892d23dd8cdf84\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/connectors/optimism/lib/Types.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title Types\\n * @notice Contains various types used throughout the Optimism contract system.\\n */\\nlibrary Types {\\n /**\\n * @notice OutputProposal represents a commitment to the L2 state. The timestamp is the L1\\n * timestamp that the output root is posted. This timestamp is used to verify that the\\n * finalization period has passed since the output root was submitted.\\n *\\n * @custom:field outputRoot Hash of the L2 output.\\n * @custom:field timestamp Timestamp of the L1 block that the output root was submitted in.\\n * @custom:field l2BlockNumber L2 block number that the output corresponds to.\\n */\\n struct OutputProposal {\\n bytes32 outputRoot;\\n uint128 timestamp;\\n uint128 l2BlockNumber;\\n }\\n\\n /**\\n * @notice Struct representing the elements that are hashed together to generate an output root\\n * which itself represents a snapshot of the L2 state.\\n *\\n * @custom:field version Version of the output root.\\n * @custom:field stateRoot Root of the state trie at the block of this output.\\n * @custom:field messagePasserStorageRoot Root of the message passer storage trie.\\n * @custom:field latestBlockhash Hash of the block this output was generated from.\\n */\\n struct OutputRootProof {\\n bytes32 version;\\n bytes32 stateRoot;\\n bytes32 messagePasserStorageRoot;\\n bytes32 latestBlockhash;\\n }\\n\\n /**\\n * @notice Struct representing a deposit transaction (L1 => L2 transaction) created by an end\\n * user (as opposed to a system deposit transaction generated by the system).\\n *\\n * @custom:field from Address of the sender of the transaction.\\n * @custom:field to Address of the recipient of the transaction.\\n * @custom:field isCreation True if the transaction is a contract creation.\\n * @custom:field value Value to send to the recipient.\\n * @custom:field mint Amount of ETH to mint.\\n * @custom:field gasLimit Gas limit of the transaction.\\n * @custom:field data Data of the transaction.\\n * @custom:field l1BlockHash Hash of the block the transaction was submitted in.\\n * @custom:field logIndex Index of the log in the block the transaction was submitted in.\\n */\\n struct UserDepositTransaction {\\n address from;\\n address to;\\n bool isCreation;\\n uint256 value;\\n uint256 mint;\\n uint64 gasLimit;\\n bytes data;\\n bytes32 l1BlockHash;\\n uint256 logIndex;\\n }\\n\\n /**\\n * @notice Struct representing a withdrawal transaction.\\n *\\n * @custom:field nonce Nonce of the withdrawal transaction\\n * @custom:field sender Address of the sender of the transaction.\\n * @custom:field target Address of the recipient of the transaction.\\n * @custom:field value Value to send to the recipient.\\n * @custom:field gasLimit Gas limit of the transaction.\\n * @custom:field data Data of the transaction.\\n */\\n struct WithdrawalTransaction {\\n uint256 nonce;\\n address sender;\\n address target;\\n uint256 value;\\n uint256 gasLimit;\\n bytes data;\\n }\\n}\\n\",\"keccak256\":\"0x79508b9f6cf7aa5579fa2fbf5411418b7dd4ce4232b6977f99d6ce07eed64f39\",\"license\":\"MIT\"},\"contracts/messaging/interfaces/IConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"../../shared/interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @notice This interface is what the Connext contract will send and receive messages through.\\n * The messaging layer should conform to this interface, and should be interchangeable (i.e.\\n * could be Nomad or a generic AMB under the hood).\\n *\\n * @dev This uses the nomad format to ensure nomad can be added in as it comes back online.\\n *\\n * Flow from transfer from polygon to optimism:\\n * 1. User calls `xcall` with destination specified\\n * 2. This will swap in to the bridge assets\\n * 3. The swapped assets will get burned\\n * 4. The Connext contract will call `dispatch` on the messaging contract to add the transfer\\n * to the root\\n * 5. [At some time interval] Relayers call `send` to send the current root from polygon to\\n * mainnet. This is done on all \\\"spoke\\\" domains.\\n * 6. [At some time interval] Relayers call `propagate` [better name] on mainnet, this generates a new merkle\\n * root from all of the AMBs\\n * - This function must be able to read root data from all AMBs and aggregate them into a single merkle\\n * tree root\\n * - Will send the mixed root from all chains back through the respective AMBs to all other chains\\n * 7. AMB will call `update` to update the latest root on the messaging contract on spoke domains\\n * 8. [At any point] Relayers can call `proveAndProcess` to prove inclusion of dispatched message, and call\\n * process on the `Connext` contract\\n * 9. Takes minted bridge tokens and credits the LP\\n *\\n * AMB requirements:\\n * - Access `msg.sender` both from mainnet -> spoke and vice versa\\n * - Ability to read *our root* from the AMB\\n *\\n * AMBs:\\n * - PoS bridge from polygon\\n * - arbitrum bridge\\n * - optimism bridge\\n * - gnosis chain\\n * - bsc (use multichain for messaging)\\n */\\ninterface IConnector is IProposedOwnable {\\n // ============ Events ============\\n /**\\n * @notice Emitted whenever a message is successfully sent over an AMB\\n * @param data The contents of the message\\n * @param encodedData Data used to send the message; specific to connector\\n * @param caller Who called the function (sent the message)\\n */\\n event MessageSent(bytes data, bytes encodedData, address caller);\\n\\n /**\\n * @notice Emitted whenever a message is successfully received over an AMB\\n * @param data The contents of the message\\n * @param caller Who called the function\\n */\\n event MessageProcessed(bytes data, address caller);\\n\\n // ============ Public fns ============\\n\\n function processMessage(bytes memory _data) external;\\n\\n function verifySender(address _expected) external returns (bool);\\n}\\n\",\"keccak256\":\"0xfba166354b442fa72b05be07aed38400b47f68498e8dfdd94fc43df00c401ed1\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IConnectorManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IOutbox} from \\\"./IOutbox.sol\\\";\\n\\n/**\\n * @notice Each router extends the `XAppConnectionClient` contract. This contract\\n * allows an admin to call `setXAppConnectionManager` to update the underlying\\n * pointers to the messaging inboxes (Replicas) and outboxes (Homes).\\n *\\n * @dev This interface only contains the functions needed for the `XAppConnectionClient`\\n * will interface with.\\n */\\ninterface IConnectorManager {\\n /**\\n * @notice Get the local inbox contract from the xAppConnectionManager\\n * @return The local inbox contract\\n * @dev The local inbox contract is a SpokeConnector with AMBs, and a\\n * Home contract with nomad\\n */\\n function home() external view returns (IOutbox);\\n\\n /**\\n * @notice Determine whether _potentialReplica is an enrolled Replica from the xAppConnectionManager\\n * @return True if _potentialReplica is an enrolled Replica\\n */\\n function isReplica(address _potentialReplica) external view returns (bool);\\n\\n /**\\n * @notice Get the local domain from the xAppConnectionManager\\n * @return The local domain\\n */\\n function localDomain() external view returns (uint32);\\n}\\n\",\"keccak256\":\"0x6b35227f507bd98075083345dd93bfb1fe649fe49867f05a642ecea67ce40ddf\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IHubConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {IConnector} from \\\"./IConnector.sol\\\";\\n\\ninterface IHubConnector is IConnector {\\n function sendMessage(bytes memory _data, bytes memory _encodedData) external payable;\\n}\\n\",\"keccak256\":\"0x9c3b0b9f1ab326d6283e404818b8c2c55c4fc1ee9919830a1d04ebc3f4a022cd\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IHubSpokeConnector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IHubSpokeConnector {\\n function saveAggregateRoot(bytes32 _aggregateRoot) external;\\n}\\n\",\"keccak256\":\"0x69e0679df0f54055b9f18a4b4eea042101628648a4acd269fe732cc289697869\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice Interface for all contracts sending messages originating on their\\n * current domain.\\n *\\n * @dev These are the Home.sol interface methods used by the `Router`\\n * and exposed via `home()` on the `XAppConnectionClient`\\n */\\ninterface IOutbox {\\n /**\\n * @notice Emitted when a new message is added to an outbound message merkle root\\n * @param leafIndex Index of message's leaf in merkle tree\\n * @param destinationAndNonce Destination and destination-specific\\n * nonce combined in single field ((destination << 32) & nonce)\\n * @param messageHash Hash of message; the leaf inserted to the Merkle tree for the message\\n * @param committedRoot the latest notarized root submitted in the last signed Update\\n * @param message Raw bytes of message\\n */\\n event Dispatch(\\n bytes32 indexed messageHash,\\n uint256 indexed leafIndex,\\n uint64 indexed destinationAndNonce,\\n bytes32 committedRoot,\\n bytes message\\n );\\n\\n /**\\n * @notice Dispatch the message it to the destination domain & recipient\\n * @dev Format the message, insert its hash into Merkle tree,\\n * enqueue the new Merkle root, and emit `Dispatch` event with message information.\\n * @param _destinationDomain Domain of destination chain\\n * @param _recipientAddress Address of recipient on destination chain as bytes32\\n * @param _messageBody Raw bytes content of message\\n * @return bytes32 The leaf added to the tree\\n */\\n function dispatch(\\n uint32 _destinationDomain,\\n bytes32 _recipientAddress,\\n bytes memory _messageBody\\n ) external returns (bytes32, bytes memory);\\n\\n /**\\n * @notice domain => next available nonce for the domain.\\n */\\n function nonces(uint32 domain) external returns (uint32);\\n}\\n\",\"keccak256\":\"0x788d0c03a94b5d28da1805f530a23b7a752285823985b8e180d448add4838d24\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/interfaces/IRootManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\ninterface IRootManager {\\n /**\\n * @notice This is called by relayers to generate + send the mixed root from mainnet via AMB to\\n * spoke domains.\\n * @dev This must read information for the root from the registered AMBs.\\n */\\n function propagate(\\n address[] calldata _connectors,\\n uint256[] calldata _fees,\\n bytes[] memory _encodedData\\n ) external payable;\\n\\n /**\\n * @notice Called by the connectors for various domains on the hub to aggregate their latest\\n * inbound root.\\n * @dev This must read information for the root from the registered AMBs\\n */\\n function aggregate(uint32 _domain, bytes32 _outbound) external;\\n}\\n\",\"keccak256\":\"0xa895dfaa4baad37a636e7e7e7da72a0a4badfd2d3d8256f975e5101cd5a98236\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/DomainIndexer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @notice This abstract contract was written to ensure domain and connector mutex is scalable for the\\n * purposes of messaging layer operations. In particular, it aims to reduce gas costs to be relatively\\n * static regardless of the number of domains kept in storage by enabling callers of `RootManager.propagate`\\n * to supply the `domains` and `connectors` arrays as params, and check the hashes of those params against\\n * those we keep in storage.\\n */\\nabstract contract DomainIndexer {\\n // ============ Events ============\\n\\n event DomainAdded(uint32 domain, address connector);\\n event DomainRemoved(uint32 domain);\\n\\n // ============ Properties ============\\n\\n /**\\n * @notice The absolute maximum number of domains that we should support. Domain and connector arrays\\n * are naturally unbounded, but the gas cost of reading these arrays in `updateHashes()` is bounded by\\n * the block's gas limit.\\n *\\n * If we want to set a hard ceiling for gas costs for the `updateHashes()` method at approx. 500K gas,\\n * with an average SLOAD cost of 900 gas per domain (1 uint32, 1 address):\\n * 500K / 900 = ~555 domains\\n *\\n * Realistically, the cap on the number of domains will likely exist in other places, but we cap it\\n * here as a last resort.\\n */\\n uint256 public constant MAX_DOMAINS = 500;\\n\\n /**\\n * @notice Domains array tracks currently subscribed domains to this hub aggregator.\\n * We should distribute the aggregate root to all of these domains in the `propagate` method.\\n * @dev Whenever this domains array is updated, the connectors array should also be updated.\\n */\\n uint32[] public domains;\\n\\n /**\\n * @notice A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided\\n * array of domains matches the one we have in storage.\\n * @dev This hash should be re-calculated whenever the domains array is updated.\\n */\\n bytes32 public domainsHash;\\n\\n /**\\n * @notice Tracks the addresses of the hub connector contracts corresponding to subscribed spoke domains.\\n * The index of any given connector in this array should match the index of that connector's target spoke\\n * domain in the `domains` array above.\\n * @dev This should be updated whenever the domains array is updated.\\n */\\n address[] public connectors;\\n\\n /**\\n * @notice A \\\"quick reference\\\" hash used in the `propagate` method below to validate that the provided\\n * array of connectors matches the one we have in storage.\\n * @dev This hash should be re-calculated whenever the connectors array is updated.\\n */\\n bytes32 public connectorsHash;\\n\\n /**\\n * @notice Shortcut to reverse lookup the index by domain. We index starting at one so the zero value can\\n * be considered invalid (see fn: `isDomainSupported`).\\n * @dev This should be updated whenever the domains array is updated.\\n */\\n mapping(uint32 => uint256) private domainToIndexPlusOne;\\n\\n // ============ Getters ============\\n\\n /**\\n * @notice Convenience shortcut for supported domains. Used to sanity check adding new domains.\\n * @param _domain Domain to check.\\n */\\n function isDomainSupported(uint32 _domain) public view returns (bool) {\\n return domainToIndexPlusOne[_domain] != 0;\\n }\\n\\n /**\\n * @notice Gets the index of a given domain in the domains and connectors arrays.\\n * @dev Reverts if domain is not supported.\\n * @param _domain The domain for which to get the index value.\\n */\\n function getDomainIndex(uint32 _domain) public view returns (uint256) {\\n uint256 index = domainToIndexPlusOne[_domain];\\n require(index != 0, \\\"!supported\\\");\\n return index - 1;\\n }\\n\\n /**\\n * @notice Gets the corresponding hub connector address for a given spoke domain.\\n * @dev Inefficient, should only be used by caller if they have no index reference.\\n * @param _domain The domain for which to get the hub connector address.\\n */\\n function getConnectorForDomain(uint32 _domain) public view returns (address) {\\n return connectors[getDomainIndex(_domain)];\\n }\\n\\n /**\\n * @notice Validate given domains and connectors arrays are correct (i.e. they mirror what is\\n * currently saved in storage).\\n * @dev Reverts if domains or connectors do not match, including ordering.\\n * @param _domains The given domains array to check.\\n * @param _connectors The given connectors array to check.\\n */\\n function validateDomains(uint32[] calldata _domains, address[] calldata _connectors) public view {\\n // Sanity check: arguments are same length.\\n require(_domains.length == _connectors.length, \\\"!matching length\\\");\\n // Validate that given domains match the current array in storage.\\n require(keccak256(abi.encode(_domains)) == domainsHash, \\\"!domains\\\");\\n // Validate that given connectors match the current array in storage.\\n require(keccak256(abi.encode(_connectors)) == connectorsHash, \\\"!connectors\\\");\\n }\\n\\n /**\\n * @notice Validate given connectors array is correct (i.e. it mirrors what is\\n * currently saved in storage).\\n * @dev Reverts if domains or connectors do not match, including ordering.\\n * @param _connectors The given connectors array to check.\\n */\\n function validateConnectors(address[] calldata _connectors) public view {\\n // Validate that given connectors match the current array in storage.\\n require(keccak256(abi.encode(_connectors)) == connectorsHash, \\\"!connectors\\\");\\n }\\n\\n // ============ Helper Functions ============\\n\\n /**\\n * @notice Handles all mutex for adding support for a given domain.\\n * @param _domain Domain for which we are adding support.\\n * @param _connector Corresponding hub connector address belonging to given domain.\\n */\\n function addDomain(uint32 _domain, address _connector) internal {\\n // Sanity check: domain does not already exist.\\n require(!isDomainSupported(_domain), \\\"domain exists\\\");\\n // Sanity check: connector is reasonable.\\n require(_connector != address(0), \\\"!connector\\\");\\n // Sanity check: Under maximum.\\n require(domains.length < MAX_DOMAINS, \\\"DomainIndexer at capacity\\\");\\n\\n // Push domain and connector to respective arrays.\\n domains.push(_domain);\\n connectors.push(_connector);\\n // Set reverse lookup.\\n uint256 _indexPlusOne = domains.length;\\n domainToIndexPlusOne[_domain] = _indexPlusOne;\\n\\n // Update the hashes for the given arrays.\\n updateHashes();\\n\\n emit DomainAdded(_domain, _connector);\\n }\\n\\n /**\\n * @notice Handles all mutex for removing support for a given domain.\\n * @param _domain Domain we are removing.\\n * @return address of the hub connector for the domain we removed.\\n */\\n function removeDomain(uint32 _domain) internal returns (address) {\\n uint256 _index = getDomainIndex(_domain);\\n // Get the connector at the given index.\\n address _connector = connectors[_index];\\n // Sanity check: connector exists.\\n require(_connector != address(0), \\\"connector !exists\\\");\\n\\n // Shortcut: is the index the last index in the domains/connectors arrays?\\n // IFF not, we'll need to swap the target with the current last so we can pop().\\n uint256 _lastIndex = domains.length - 1;\\n if (_index < _lastIndex) {\\n // If the target index for removal is not the last index, we copy over the domain at the last\\n // index to overwrite the target's index so we can conveniently pop the last item.\\n uint32 copiedDomain = domains[_lastIndex];\\n domains[_index] = copiedDomain;\\n connectors[_index] = connectors[_lastIndex];\\n // Update the domain to index mapping for the copied domain.\\n domainToIndexPlusOne[copiedDomain] = _index + 1; // NOTE: Naturally adding 1 here; see mapping name.\\n }\\n\\n // Pop the last item in the arrays.\\n domains.pop();\\n connectors.pop();\\n // Erase reverse lookup.\\n delete domainToIndexPlusOne[_domain];\\n\\n // Update the hashes for the given arrays.\\n updateHashes();\\n\\n emit DomainRemoved(_domain);\\n\\n return _connector;\\n }\\n\\n /**\\n * @notice Calculate the new hashes for the domains and connectors arrays and update storage refs.\\n * @dev Used for the Connector update functions `addConnector`, `removeConnector`.\\n */\\n function updateHashes() internal {\\n uint32[] memory _domains = domains;\\n address[] memory _connectors = connectors;\\n domainsHash = keccak256(abi.encode(_domains));\\n connectorsHash = keccak256(abi.encode(_connectors));\\n }\\n}\\n\",\"keccak256\":\"0x2f0f477581793a2d846d3525d6def40067a946dd1a68d700eec55a97febbc2f6\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/MerkleLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title MerkleLib\\n * @author Illusory Systems Inc.\\n * @notice An incremental merkle tree modeled on the eth2 deposit contract.\\n **/\\nlibrary MerkleLib {\\n // ========== Custom Errors ===========\\n\\n error MerkleLib__insert_treeIsFull();\\n\\n // ============ Constants =============\\n\\n uint256 internal constant TREE_DEPTH = 32;\\n uint256 internal constant MAX_LEAVES = 2**TREE_DEPTH - 1;\\n\\n /**\\n * @dev Z_i represent the hash values at different heights for a binary tree with leaf values equal to `0`.\\n * (e.g. Z_1 is the keccak256 hash of (0x0, 0x0), Z_2 is the keccak256 hash of (Z_1, Z_1), etc...)\\n * Z_0 is the bottom of the 33-layer tree, Z_32 is the top (i.e. root).\\n * Used to shortcut calculation in root calculation methods below.\\n */\\n bytes32 internal constant Z_0 = hex\\\"0000000000000000000000000000000000000000000000000000000000000000\\\";\\n bytes32 internal constant Z_1 = hex\\\"ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5\\\";\\n bytes32 internal constant Z_2 = hex\\\"b4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d30\\\";\\n bytes32 internal constant Z_3 = hex\\\"21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba85\\\";\\n bytes32 internal constant Z_4 = hex\\\"e58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a19344\\\";\\n bytes32 internal constant Z_5 = hex\\\"0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d\\\";\\n bytes32 internal constant Z_6 = hex\\\"887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a1968\\\";\\n bytes32 internal constant Z_7 = hex\\\"ffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f83\\\";\\n bytes32 internal constant Z_8 = hex\\\"9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af\\\";\\n bytes32 internal constant Z_9 = hex\\\"cefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e0\\\";\\n bytes32 internal constant Z_10 = hex\\\"f9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a5\\\";\\n bytes32 internal constant Z_11 = hex\\\"f8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf892\\\";\\n bytes32 internal constant Z_12 = hex\\\"3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c\\\";\\n bytes32 internal constant Z_13 = hex\\\"c1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb\\\";\\n bytes32 internal constant Z_14 = hex\\\"5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc\\\";\\n bytes32 internal constant Z_15 = hex\\\"da7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d2\\\";\\n bytes32 internal constant Z_16 = hex\\\"2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f\\\";\\n bytes32 internal constant Z_17 = hex\\\"e1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a\\\";\\n bytes32 internal constant Z_18 = hex\\\"5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a0\\\";\\n bytes32 internal constant Z_19 = hex\\\"b46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa0\\\";\\n bytes32 internal constant Z_20 = hex\\\"c65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e2\\\";\\n bytes32 internal constant Z_21 = hex\\\"f4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd9\\\";\\n bytes32 internal constant Z_22 = hex\\\"5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e377\\\";\\n bytes32 internal constant Z_23 = hex\\\"4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee652\\\";\\n bytes32 internal constant Z_24 = hex\\\"cdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef\\\";\\n bytes32 internal constant Z_25 = hex\\\"0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d\\\";\\n bytes32 internal constant Z_26 = hex\\\"b8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d0\\\";\\n bytes32 internal constant Z_27 = hex\\\"838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e\\\";\\n bytes32 internal constant Z_28 = hex\\\"662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e\\\";\\n bytes32 internal constant Z_29 = hex\\\"388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea322\\\";\\n bytes32 internal constant Z_30 = hex\\\"93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d735\\\";\\n bytes32 internal constant Z_31 = hex\\\"8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a9\\\";\\n bytes32 internal constant Z_32 = hex\\\"27ae5ba08d7291c96c8cbddcc148bf48a6d68c7974b94356f53754ef6171d757\\\";\\n\\n // ============= Structs ==============\\n\\n /**\\n * @notice Struct representing incremental merkle tree. Contains current\\n * branch and the number of inserted leaves in the tree.\\n **/\\n struct Tree {\\n bytes32[TREE_DEPTH] branch;\\n uint256 count;\\n }\\n\\n // ========= Write Methods =========\\n\\n /**\\n * @notice Inserts a given node (leaf) into merkle tree. Operates on an in-memory tree and\\n * returns an updated version of that tree.\\n * @dev Reverts if the tree is already full.\\n * @param node Element to insert into tree.\\n * @return Tree Updated tree.\\n **/\\n function insert(Tree memory tree, bytes32 node) internal pure returns (Tree memory) {\\n // Update tree.count to increase the current count by 1 since we'll be including a new node.\\n uint256 size = ++tree.count;\\n if (size > MAX_LEAVES) revert MerkleLib__insert_treeIsFull();\\n\\n // Loop starting at 0, ending when we've finished inserting the node (i.e. hashing it) into\\n // the active branch. Each loop we cut size in half, hashing the inserted node up the active\\n // branch along the way.\\n for (uint256 i; i < TREE_DEPTH; ) {\\n // Check if the current size is odd; if so, we set this index in the branch to be the node.\\n if ((size & 1) == 1) {\\n // If i > 0, then this node will be a hash of the original node with every layer up\\n // until layer `i`.\\n tree.branch[i] = node;\\n return tree;\\n }\\n // If the size is not yet odd, we hash the current index in the tree branch with the node.\\n node = keccak256(abi.encodePacked(tree.branch[i], node));\\n size >>= 1; // Cut size in half (statement equivalent to: `size /= 2`).\\n\\n unchecked {\\n ++i;\\n }\\n }\\n // As the loop should always end prematurely with the `return` statement, this code should\\n // be unreachable. We revert here just to be safe.\\n revert MerkleLib__insert_treeIsFull();\\n }\\n\\n // ========= Read Methods =========\\n\\n /**\\n * @notice Calculates and returns tree's current root.\\n * @return _current bytes32 root.\\n **/\\n function root(Tree storage tree) internal view returns (bytes32 _current) {\\n uint256 _index = tree.count;\\n\\n if (_index == 0) {\\n return Z_32;\\n }\\n\\n uint256 i;\\n assembly {\\n let TREE_SLOT := tree.slot\\n\\n for {\\n\\n } true {\\n\\n } {\\n for {\\n\\n } true {\\n\\n } {\\n if and(_index, 1) {\\n mstore(0, sload(TREE_SLOT))\\n mstore(0x20, Z_0)\\n _current := keccak256(0, 0x40)\\n break\\n }\\n\\n if and(_index, shl(1, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 1)))\\n mstore(0x20, Z_1)\\n _current := keccak256(0, 0x40)\\n i := 1\\n break\\n }\\n\\n if and(_index, shl(2, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 2)))\\n mstore(0x20, Z_2)\\n _current := keccak256(0, 0x40)\\n i := 2\\n break\\n }\\n\\n if and(_index, shl(3, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 3)))\\n mstore(0x20, Z_3)\\n _current := keccak256(0, 0x40)\\n i := 3\\n break\\n }\\n\\n if and(_index, shl(4, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 4)))\\n mstore(0x20, Z_4)\\n _current := keccak256(0, 0x40)\\n i := 4\\n break\\n }\\n\\n if and(_index, shl(5, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 5)))\\n mstore(0x20, Z_5)\\n _current := keccak256(0, 0x40)\\n i := 5\\n break\\n }\\n\\n if and(_index, shl(6, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 6)))\\n mstore(0x20, Z_6)\\n _current := keccak256(0, 0x40)\\n i := 6\\n break\\n }\\n\\n if and(_index, shl(7, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 7)))\\n mstore(0x20, Z_7)\\n _current := keccak256(0, 0x40)\\n i := 7\\n break\\n }\\n\\n if and(_index, shl(8, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 8)))\\n mstore(0x20, Z_8)\\n _current := keccak256(0, 0x40)\\n i := 8\\n break\\n }\\n\\n if and(_index, shl(9, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 9)))\\n mstore(0x20, Z_9)\\n _current := keccak256(0, 0x40)\\n i := 9\\n break\\n }\\n\\n if and(_index, shl(10, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 10)))\\n mstore(0x20, Z_10)\\n _current := keccak256(0, 0x40)\\n i := 10\\n break\\n }\\n\\n if and(_index, shl(11, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 11)))\\n mstore(0x20, Z_11)\\n _current := keccak256(0, 0x40)\\n i := 11\\n break\\n }\\n\\n if and(_index, shl(12, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 12)))\\n mstore(0x20, Z_12)\\n _current := keccak256(0, 0x40)\\n i := 12\\n break\\n }\\n\\n if and(_index, shl(13, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 13)))\\n mstore(0x20, Z_13)\\n _current := keccak256(0, 0x40)\\n i := 13\\n break\\n }\\n\\n if and(_index, shl(14, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 14)))\\n mstore(0x20, Z_14)\\n _current := keccak256(0, 0x40)\\n i := 14\\n break\\n }\\n\\n if and(_index, shl(15, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 15)))\\n mstore(0x20, Z_15)\\n _current := keccak256(0, 0x40)\\n i := 15\\n break\\n }\\n\\n if and(_index, shl(16, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 16)))\\n mstore(0x20, Z_16)\\n _current := keccak256(0, 0x40)\\n i := 16\\n break\\n }\\n\\n if and(_index, shl(17, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 17)))\\n mstore(0x20, Z_17)\\n _current := keccak256(0, 0x40)\\n i := 17\\n break\\n }\\n\\n if and(_index, shl(18, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 18)))\\n mstore(0x20, Z_18)\\n _current := keccak256(0, 0x40)\\n i := 18\\n break\\n }\\n\\n if and(_index, shl(19, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 19)))\\n mstore(0x20, Z_19)\\n _current := keccak256(0, 0x40)\\n i := 19\\n break\\n }\\n\\n if and(_index, shl(20, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 20)))\\n mstore(0x20, Z_20)\\n _current := keccak256(0, 0x40)\\n i := 20\\n break\\n }\\n\\n if and(_index, shl(21, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 21)))\\n mstore(0x20, Z_21)\\n _current := keccak256(0, 0x40)\\n i := 21\\n break\\n }\\n\\n if and(_index, shl(22, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 22)))\\n mstore(0x20, Z_22)\\n _current := keccak256(0, 0x40)\\n i := 22\\n break\\n }\\n\\n if and(_index, shl(23, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 23)))\\n mstore(0x20, Z_23)\\n _current := keccak256(0, 0x40)\\n i := 23\\n break\\n }\\n\\n if and(_index, shl(24, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 24)))\\n mstore(0x20, Z_24)\\n _current := keccak256(0, 0x40)\\n i := 24\\n break\\n }\\n\\n if and(_index, shl(25, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 25)))\\n mstore(0x20, Z_25)\\n _current := keccak256(0, 0x40)\\n i := 25\\n break\\n }\\n\\n if and(_index, shl(26, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 26)))\\n mstore(0x20, Z_26)\\n _current := keccak256(0, 0x40)\\n i := 26\\n break\\n }\\n\\n if and(_index, shl(27, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 27)))\\n mstore(0x20, Z_27)\\n _current := keccak256(0, 0x40)\\n i := 27\\n break\\n }\\n\\n if and(_index, shl(28, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 28)))\\n mstore(0x20, Z_28)\\n _current := keccak256(0, 0x40)\\n i := 28\\n break\\n }\\n\\n if and(_index, shl(29, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 29)))\\n mstore(0x20, Z_29)\\n _current := keccak256(0, 0x40)\\n i := 29\\n break\\n }\\n\\n if and(_index, shl(30, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 30)))\\n mstore(0x20, Z_30)\\n _current := keccak256(0, 0x40)\\n i := 30\\n break\\n }\\n\\n if and(_index, shl(31, 1)) {\\n mstore(0, sload(add(TREE_SLOT, 31)))\\n mstore(0x20, Z_31)\\n _current := keccak256(0, 0x40)\\n i := 31\\n break\\n }\\n\\n _current := Z_32\\n i := 32\\n break\\n }\\n\\n if gt(i, 30) {\\n break\\n }\\n\\n {\\n if lt(i, 1) {\\n switch and(_index, shl(1, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_1)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 1)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 2) {\\n switch and(_index, shl(2, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_2)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 2)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 3) {\\n switch and(_index, shl(3, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_3)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 3)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 4) {\\n switch and(_index, shl(4, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_4)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 4)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 5) {\\n switch and(_index, shl(5, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_5)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 5)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 6) {\\n switch and(_index, shl(6, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_6)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 6)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 7) {\\n switch and(_index, shl(7, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_7)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 7)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 8) {\\n switch and(_index, shl(8, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_8)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 8)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 9) {\\n switch and(_index, shl(9, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_9)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 9)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 10) {\\n switch and(_index, shl(10, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_10)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 10)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 11) {\\n switch and(_index, shl(11, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_11)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 11)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 12) {\\n switch and(_index, shl(12, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_12)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 12)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 13) {\\n switch and(_index, shl(13, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_13)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 13)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 14) {\\n switch and(_index, shl(14, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_14)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 14)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 15) {\\n switch and(_index, shl(15, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_15)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 15)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 16) {\\n switch and(_index, shl(16, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_16)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 16)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 17) {\\n switch and(_index, shl(17, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_17)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 17)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 18) {\\n switch and(_index, shl(18, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_18)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 18)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 19) {\\n switch and(_index, shl(19, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_19)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 19)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 20) {\\n switch and(_index, shl(20, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_20)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 20)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 21) {\\n switch and(_index, shl(21, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_21)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 21)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 22) {\\n switch and(_index, shl(22, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_22)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 22)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 23) {\\n switch and(_index, shl(23, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_23)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 23)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 24) {\\n switch and(_index, shl(24, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_24)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 24)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 25) {\\n switch and(_index, shl(25, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_25)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 25)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 26) {\\n switch and(_index, shl(26, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_26)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 26)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 27) {\\n switch and(_index, shl(27, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_27)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 27)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 28) {\\n switch and(_index, shl(28, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_28)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 28)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 29) {\\n switch and(_index, shl(29, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_29)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 29)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 30) {\\n switch and(_index, shl(30, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_30)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 30)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n\\n if lt(i, 31) {\\n switch and(_index, shl(31, 1))\\n case 0 {\\n mstore(0, _current)\\n mstore(0x20, Z_31)\\n }\\n default {\\n mstore(0, sload(add(TREE_SLOT, 31)))\\n mstore(0x20, _current)\\n }\\n\\n _current := keccak256(0, 0x40)\\n }\\n }\\n\\n break\\n }\\n }\\n }\\n\\n /**\\n * @notice Calculates and returns the merkle root for the given leaf `_item`,\\n * a merkle branch, and the index of `_item` in the tree.\\n * @param _item Merkle leaf\\n * @param _branch Merkle proof\\n * @param _index Index of `_item` in tree\\n * @return _current Calculated merkle root\\n **/\\n function branchRoot(\\n bytes32 _item,\\n bytes32[TREE_DEPTH] memory _branch,\\n uint256 _index\\n ) internal pure returns (bytes32 _current) {\\n assembly {\\n _current := _item\\n let BRANCH_DATA_OFFSET := _branch\\n let f\\n\\n f := shl(5, and(_index, 1))\\n mstore(f, _current)\\n mstore(sub(0x20, f), mload(BRANCH_DATA_OFFSET))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(1, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 1))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(2, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 2))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(3, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 3))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(4, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 4))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(5, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 5))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(6, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 6))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(7, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 7))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(8, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 8))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(9, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 9))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(10, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 10))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(11, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 11))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(12, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 12))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(13, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 13))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(14, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 14))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(15, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 15))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(16, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 16))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(17, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 17))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(18, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 18))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(19, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 19))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(20, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 20))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(21, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 21))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(22, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 22))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(23, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 23))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(24, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 24))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(25, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 25))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(26, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 26))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(27, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 27))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(28, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 28))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(29, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 29))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(30, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 30))))\\n _current := keccak256(0, 0x40)\\n\\n f := shl(5, iszero(and(_index, shl(31, 1))))\\n mstore(sub(0x20, f), _current)\\n mstore(f, mload(add(BRANCH_DATA_OFFSET, shl(5, 31))))\\n _current := keccak256(0, 0x40)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x08c791dbeef6253813d74e2145183501fe7631c13d5ac9d768036f47b66b693e\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/Queue.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\n/**\\n * @title QueueLib\\n * @notice Library containing queue struct and operations for queue used by RootManager and SpokeConnector\\n * for handling the verification period. Tracks both message data itself and the block that the message was\\n * committed to the queue.\\n **/\\nlibrary QueueLib {\\n /**\\n * @notice Queue struct\\n * @dev Internally keeps track of the `first` and `last` elements through\\n * indices and a mapping of indices to enqueued elements.\\n **/\\n struct Queue {\\n uint128 first;\\n uint128 last;\\n // Message data (roots) that have been received.\\n mapping(uint256 => bytes32) data;\\n // The block that the message data was committed.\\n mapping(uint256 => uint256) commitBlock;\\n // A reverse mapping of all entries that have been \\\"removed\\\" by value; behaves like a blocklist.\\n // NOTE: Removed values can still be pushed to the queue, but will be ignored/skipped when dequeuing.\\n mapping(bytes32 => bool) removed;\\n }\\n\\n /**\\n * @notice Initializes the queue\\n * @dev Empty state denoted by queue.first > queue.last. Queue initialized with\\n * queue.first = 1 and queue.last = 0.\\n **/\\n function initialize(Queue storage queue) internal {\\n queue.first = 1;\\n delete queue.last;\\n }\\n\\n /**\\n * @notice Enqueues a single new element and records block number that the item was enqueued\\n * (i.e. current block).\\n * @param item New element to be enqueued.\\n * @return last Index of newly enqueued element.\\n **/\\n function enqueue(Queue storage queue, bytes32 item) internal returns (uint128 last) {\\n // Commit block is the block we are committing this item to the queue.\\n uint256 commitBlock = block.number;\\n // Increment `last` position.\\n last = ++queue.last;\\n // Add the item and record block number.\\n queue.data[last] = item;\\n queue.commitBlock[last] = commitBlock;\\n }\\n\\n /**\\n * @notice Dequeues element at front of queue if it exists AND it's surpassed the given\\n * verification period (i.e. has been sitting in the queue for enough blocks).\\n * @param queue QueueStorage struct from contract.\\n * @param delay The required delay that must have been surpassed in order to merit dequeuing\\n * the element.\\n * @param max The maximum number of elements we are allowed to dequeue in this call.\\n * @return item Dequeued element IFF delay period has been surpassed; otherwise, empty bytes32.\\n **/\\n function dequeueVerified(\\n Queue storage queue,\\n uint256 delay,\\n uint128 max\\n ) internal returns (bytes32[] memory) {\\n uint128 first = queue.first;\\n uint128 last = queue.last;\\n\\n // If queue is empty, short-circuit here.\\n if (last < first) {\\n return new bytes32[](0);\\n }\\n\\n // Input sanity checks.\\n require(first != 0, \\\"queue !init'd\\\");\\n require(max > 0, \\\"!acceptable max\\\");\\n\\n {\\n // If we would otherwise be searching beyond the maximum amount we are allowed to dequeue in this\\n // call, reduce `last` to artificially shrink the available queue within the scope of this method.\\n uint128 highestAllowed = first + max - 1;\\n if (last > highestAllowed) {\\n last = highestAllowed;\\n }\\n }\\n\\n // Commit block must be below this block to be considered verified.\\n // NOTE: It's assumed that block number is a higher value than delay (i.e. delay is reasonable).\\n uint256 highestAcceptableCommitBlock = block.number - delay;\\n\\n // To determine the last item index in the queue we want to return, iterate backwards until we\\n // find a `commitBlock` that has surpassed the delay period.\\n // TODO: The most efficient way to determine the split index here should be using a binary search.\\n bool containsVerified;\\n // NOTE: `first <= last` rephrased here to `!(first > last)` as it's a cheaper condition.\\n while (!(first > last)) {\\n uint256 commitBlock = queue.commitBlock[last];\\n // NOTE: Same as `commitBlock <= highestAcceptableCommitBlock`.\\n if (!(commitBlock > highestAcceptableCommitBlock)) {\\n containsVerified = true;\\n break;\\n }\\n unchecked {\\n --last;\\n }\\n }\\n // IFF no verified items were found, then we can return an empty array.\\n if (!containsVerified) {\\n return new bytes32[](0);\\n }\\n\\n bytes32[] memory items = new bytes32[](last + 1 - first);\\n uint256 index; // Cursor for index in the batch of `items`.\\n bool removedItems; // If any items have been removed, we filter them here.\\n // NOTE: `first <= last` rephrased here to `!(first > last)` as it's a cheaper condition.\\n while (!(first > last)) {\\n bytes32 item = queue.data[first];\\n // Check to see if the item has been removed before appending it to the array.\\n if (!queue.removed[item]) {\\n items[index] = item;\\n unchecked {\\n ++index;\\n }\\n } else {\\n // The item was removed. We do NOT increment the index (we will re-use this position).\\n if (!removedItems) {\\n removedItems = true;\\n }\\n }\\n\\n // Delete the item and the commitBlock.\\n // NOTE: We do NOT delete the entry from `queue.removed`, as it's a reverse lookup and we want to\\n // block that value permanently (e.g. if there's multiple of the same bad value in the queue).\\n delete queue.data[first];\\n delete queue.commitBlock[first];\\n\\n unchecked {\\n ++first;\\n }\\n }\\n\\n // Update the value for `first` in our queue object since we've dequeued a number of elements.\\n queue.first = first;\\n\\n if (!removedItems) {\\n return items;\\n } else {\\n // If some items were removed, there will be a number of trailing 0 values we need to truncate\\n // from the array. Create a new array with all of the items up until these empty values.\\n bytes32[] memory amendedItems = new bytes32[](index); // The last `index` is the new length.\\n for (uint256 i; i < index; ) {\\n amendedItems[i] = items[i];\\n unchecked {\\n ++i;\\n }\\n }\\n return amendedItems;\\n }\\n }\\n\\n /**\\n * @notice Sets a certain value to be ignored (skipped) when dequeuing.\\n */\\n function remove(Queue storage queue, bytes32 item) internal {\\n require(!queue.removed[item], \\\"already removed\\\");\\n queue.removed[item] = true;\\n }\\n\\n /**\\n * @notice Check whether the queue is empty.\\n * @param queue QueueStorage struct from contract.\\n * @return bool True if queue is empty and false if otherwise.\\n */\\n function isEmpty(Queue storage queue) internal view returns (bool) {\\n return queue.last < queue.first;\\n }\\n\\n /**\\n * @notice Returns number of elements in queue.\\n * @param queue QueueStorage struct from contract.\\n */\\n function length(Queue storage queue) internal view returns (uint256) {\\n uint128 last = queue.last;\\n uint128 first = queue.first;\\n // Cannot underflow unless state is corrupted.\\n return _length(last, first);\\n }\\n\\n /**\\n * @notice Returns number of elements between `last` and `first` (used internally).\\n * @param last The last element index.\\n * @param first The first element index.\\n */\\n function _length(uint128 last, uint128 first) internal pure returns (uint256) {\\n return uint256(last + 1 - first);\\n }\\n}\\n\",\"keccak256\":\"0x2997d7d6ca0fc2703a720465e3c378699267189af17a7285655ab1ca91fb7230\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/messaging/libraries/SnapshotId.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\n/**\\n * @title SnapshotId library\\n * @notice A library to be used in spoke connector and root manager to calculates the current snapshot id\\n */\\nlibrary SnapshotId {\\n /**\\n * @notice Duration of the snapshot\\n * @dev Off-chain agents could change the effective snapshot length by skipping snapshots. This is the\\n * smallest unit of snapshot duration, not just the only option.\\n */\\n uint256 constant SNAPSHOT_DURATION = 30 minutes;\\n\\n /**\\n * @notice This function calculates the last completed snapshot id\\n * @return _lastCompletedSnapshotId The last completed snapshot id\\n */\\n function getLastCompletedSnapshotId() internal view returns (uint256 _lastCompletedSnapshotId) {\\n unchecked {\\n _lastCompletedSnapshotId = block.timestamp / SNAPSHOT_DURATION;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe1b04329fe0140f863f1916daa081ca6faf4956064a48d8afd8febe3baca2d4b\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {IProposedOwnable} from \\\"./interfaces/IProposedOwnable.sol\\\";\\n\\n/**\\n * @title ProposedOwnable\\n * @notice Contract module which provides a basic access control mechanism,\\n * where there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed via a two step process:\\n * 1. Call `proposeOwner`\\n * 2. Wait out the delay period\\n * 3. Call `acceptOwner`\\n *\\n * @dev This module is used through inheritance. It will make available the\\n * modifier `onlyOwner`, which can be applied to your functions to restrict\\n * their use to the owner.\\n *\\n * @dev The majority of this code was taken from the openzeppelin Ownable\\n * contract\\n *\\n */\\nabstract contract ProposedOwnable is IProposedOwnable {\\n // ========== Custom Errors ===========\\n\\n error ProposedOwnable__onlyOwner_notOwner();\\n error ProposedOwnable__onlyProposed_notProposedOwner();\\n error ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n error ProposedOwnable__proposeNewOwner_invalidProposal();\\n error ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n error ProposedOwnable__renounceOwnership_noProposal();\\n error ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // ============ Properties ============\\n\\n address private _owner;\\n\\n address private _proposed;\\n uint256 private _proposedOwnershipTimestamp;\\n\\n uint256 private constant _delay = 7 days;\\n\\n // ======== Getters =========\\n\\n /**\\n * @notice Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposed() public view virtual returns (address) {\\n return _proposed;\\n }\\n\\n /**\\n * @notice Returns the address of the proposed owner.\\n */\\n function proposedTimestamp() public view virtual returns (uint256) {\\n return _proposedOwnershipTimestamp;\\n }\\n\\n /**\\n * @notice Returns the delay period before a new owner can be accepted.\\n */\\n function delay() public view virtual returns (uint256) {\\n return _delay;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n if (_owner != msg.sender) revert ProposedOwnable__onlyOwner_notOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if called by any account other than the proposed owner.\\n */\\n modifier onlyProposed() {\\n if (_proposed != msg.sender) revert ProposedOwnable__onlyProposed_notProposedOwner();\\n _;\\n }\\n\\n /**\\n * @notice Throws if the ownership delay has not elapsed\\n */\\n modifier ownershipDelayElapsed() {\\n // Ensure delay has elapsed\\n if ((block.timestamp - _proposedOwnershipTimestamp) <= _delay)\\n revert ProposedOwnable__ownershipDelayElapsed_delayNotElapsed();\\n _;\\n }\\n\\n /**\\n * @notice Indicates if the ownership has been renounced() by\\n * checking if current owner is address(0)\\n */\\n function renounced() public view returns (bool) {\\n return _owner == address(0);\\n }\\n\\n // ======== External =========\\n\\n /**\\n * @notice Sets the timestamp for an owner to be proposed, and sets the\\n * newly proposed owner as step 1 in a 2-step process\\n */\\n function proposeNewOwner(address newlyProposed) public virtual onlyOwner {\\n // Contract as source of truth\\n if (_proposed == newlyProposed && _proposedOwnershipTimestamp != 0)\\n revert ProposedOwnable__proposeNewOwner_invalidProposal();\\n\\n // Sanity check: reasonable proposal\\n if (_owner == newlyProposed) revert ProposedOwnable__proposeNewOwner_noOwnershipChange();\\n\\n _setProposed(newlyProposed);\\n }\\n\\n /**\\n * @notice Renounces ownership of the contract after a delay\\n */\\n function renounceOwnership() public virtual onlyOwner ownershipDelayElapsed {\\n // Ensure there has been a proposal cycle started\\n if (_proposedOwnershipTimestamp == 0) revert ProposedOwnable__renounceOwnership_noProposal();\\n\\n // Require proposed is set to 0\\n if (_proposed != address(0)) revert ProposedOwnable__renounceOwnership_invalidProposal();\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(address(0));\\n }\\n\\n /**\\n * @notice Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function acceptProposedOwner() public virtual onlyProposed ownershipDelayElapsed {\\n // NOTE: no need to check if _owner == _proposed, because the _proposed\\n // is 0-d out and this check is implicitly enforced by modifier\\n\\n // NOTE: no need to check if _proposedOwnershipTimestamp > 0 because\\n // the only time this would happen is if the _proposed was never\\n // set (will fail from modifier) or if the owner == _proposed (checked\\n // above)\\n\\n // Emit event, set new owner, reset timestamp\\n _setOwner(_proposed);\\n }\\n\\n // ======== Internal =========\\n\\n function _setOwner(address newOwner) internal {\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n delete _proposedOwnershipTimestamp;\\n delete _proposed;\\n }\\n\\n function _setProposed(address newlyProposed) private {\\n _proposedOwnershipTimestamp = block.timestamp;\\n _proposed = newlyProposed;\\n emit OwnershipProposed(newlyProposed);\\n }\\n}\\n\",\"keccak256\":\"0xa96eff4fdff55ffa29cda5c18285a9af04c3cbaf55f83696085cdd2251a8d6c0\",\"license\":\"UNLICENSED\"},\"contracts/shared/ProposedOwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity 0.8.17;\\n\\nimport {Initializable} from \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\n\\nimport {ProposedOwnable} from \\\"./ProposedOwnable.sol\\\";\\n\\nabstract contract ProposedOwnableUpgradeable is Initializable, ProposedOwnable {\\n /**\\n * @dev Initializes the contract setting the deployer as the initial\\n */\\n function __ProposedOwnable_init() internal onlyInitializing {\\n __ProposedOwnable_init_unchained();\\n }\\n\\n function __ProposedOwnable_init_unchained() internal onlyInitializing {\\n _setOwner(msg.sender);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[47] private __GAP;\\n}\\n\",\"keccak256\":\"0x2b064b03a25915e93749905ef3aae516ffaac86b8ba9f126b614425b623bf477\",\"license\":\"UNLICENSED\"},\"contracts/shared/interfaces/IProposedOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.17;\\n\\n/**\\n * @title IProposedOwnable\\n * @notice Defines a minimal interface for ownership with a two step proposal and acceptance\\n * process\\n */\\ninterface IProposedOwnable {\\n /**\\n * @dev This emits when change in ownership of a contract is proposed.\\n */\\n event OwnershipProposed(address indexed proposedOwner);\\n\\n /**\\n * @dev This emits when ownership of a contract changes.\\n */\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @notice Get the address of the owner\\n * @return owner_ The address of the owner.\\n */\\n function owner() external view returns (address owner_);\\n\\n /**\\n * @notice Get the address of the proposed owner\\n * @return proposed_ The address of the proposed.\\n */\\n function proposed() external view returns (address proposed_);\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n * @param newlyProposed The proposed new owner of the contract\\n */\\n function proposeNewOwner(address newlyProposed) external;\\n\\n /**\\n * @notice Set the address of the proposed owner of the contract\\n */\\n function acceptProposedOwner() external;\\n}\\n\",\"keccak256\":\"0x4ec1aa589d37d0c1eac9966e26d2d3540d1661b81763e678f14d2c6fa0682323\",\"license\":\"MIT\"},\"contracts/shared/libraries/TypeCasts.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nimport {TypedMemView} from \\\"./TypedMemView.sol\\\";\\n\\nlibrary TypeCasts {\\n using TypedMemView for bytes;\\n using TypedMemView for bytes29;\\n\\n // alignment preserving cast\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n // alignment preserving cast\\n function bytes32ToAddress(bytes32 _buf) internal pure returns (address) {\\n return address(uint160(uint256(_buf)));\\n }\\n}\\n\",\"keccak256\":\"0x80e5eb2dc7f18a751edf2658e6166fd791e40aa8ff2488ad897539aafef59776\",\"license\":\"MIT OR Apache-2.0\"},\"contracts/shared/libraries/TypedMemView.sol\":{\"content\":\"// SPDX-License-Identifier: MIT OR Apache-2.0\\npragma solidity 0.8.17;\\n\\nlibrary TypedMemView {\\n // Why does this exist?\\n // the solidity `bytes memory` type has a few weaknesses.\\n // 1. You can't index ranges effectively\\n // 2. You can't slice without copying\\n // 3. The underlying data may represent any type\\n // 4. Solidity never deallocates memory, and memory costs grow\\n // superlinearly\\n\\n // By using a memory view instead of a `bytes memory` we get the following\\n // advantages:\\n // 1. Slices are done on the stack, by manipulating the pointer\\n // 2. We can index arbitrary ranges and quickly convert them to stack types\\n // 3. We can insert type info into the pointer, and typecheck at runtime\\n\\n // This makes `TypedMemView` a useful tool for efficient zero-copy\\n // algorithms.\\n\\n // Why bytes29?\\n // We want to avoid confusion between views, digests, and other common\\n // types so we chose a large and uncommonly used odd number of bytes\\n //\\n // Note that while bytes are left-aligned in a word, integers and addresses\\n // are right-aligned. This means when working in assembly we have to\\n // account for the 3 unused bytes on the righthand side\\n //\\n // First 5 bytes are a type flag.\\n // - ff_ffff_fffe is reserved for unknown type.\\n // - ff_ffff_ffff is reserved for invalid types/errors.\\n // next 12 are memory address\\n // next 12 are len\\n // bottom 3 bytes are empty\\n\\n // Assumptions:\\n // - non-modification of memory.\\n // - No Solidity updates\\n // - - wrt free mem point\\n // - - wrt bytes representation in memory\\n // - - wrt memory addressing in general\\n\\n // Usage:\\n // - create type constants\\n // - use `assertType` for runtime type assertions\\n // - - unfortunately we can't do this at compile time yet :(\\n // - recommended: implement modifiers that perform type checking\\n // - - e.g.\\n // - - `uint40 constant MY_TYPE = 3;`\\n // - - ` modifer onlyMyType(bytes29 myView) { myView.assertType(MY_TYPE); }`\\n // - instantiate a typed view from a bytearray using `ref`\\n // - use `index` to inspect the contents of the view\\n // - use `slice` to create smaller views into the same memory\\n // - - `slice` can increase the offset\\n // - - `slice can decrease the length`\\n // - - must specify the output type of `slice`\\n // - - `slice` will return a null view if you try to overrun\\n // - - make sure to explicitly check for this with `notNull` or `assertType`\\n // - use `equal` for typed comparisons.\\n\\n // The null view\\n bytes29 public constant NULL = hex\\\"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\";\\n uint256 constant LOW_12_MASK = 0xffffffffffffffffffffffff;\\n uint256 constant TWENTY_SEVEN_BYTES = 8 * 27;\\n uint256 private constant _27_BYTES_IN_BITS = 8 * 27; // <--- also used this named constant where ever 216 is used.\\n uint256 private constant LOW_27_BYTES_MASK = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff; // (1 << _27_BYTES_IN_BITS) - 1;\\n\\n // ========== Custom Errors ===========\\n\\n error TypedMemView__assertType_typeAssertionFailed(uint256 actual, uint256 expected);\\n error TypedMemView__index_overrun(uint256 loc, uint256 len, uint256 index, uint256 slice);\\n error TypedMemView__index_indexMoreThan32Bytes();\\n error TypedMemView__unsafeCopyTo_nullPointer();\\n error TypedMemView__unsafeCopyTo_invalidPointer();\\n error TypedMemView__unsafeCopyTo_identityOOG();\\n error TypedMemView__assertValid_validityAssertionFailed();\\n\\n /**\\n * @notice Changes the endianness of a uint256.\\n * @dev https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel\\n * @param _b The unsigned integer to reverse\\n * @return v - The reversed value\\n */\\n function reverseUint256(uint256 _b) internal pure returns (uint256 v) {\\n v = _b;\\n\\n // swap bytes\\n v =\\n ((v >> 8) & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) |\\n ((v & 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF) << 8);\\n // swap 2-byte long pairs\\n v =\\n ((v >> 16) & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) |\\n ((v & 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) << 16);\\n // swap 4-byte long pairs\\n v =\\n ((v >> 32) & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) |\\n ((v & 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) << 32);\\n // swap 8-byte long pairs\\n v =\\n ((v >> 64) & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) |\\n ((v & 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) << 64);\\n // swap 16-byte long pairs\\n v = (v >> 128) | (v << 128);\\n }\\n\\n /**\\n * @notice Create a mask with the highest `_len` bits set.\\n * @param _len The length\\n * @return mask - The mask\\n */\\n function leftMask(uint8 _len) private pure returns (uint256 mask) {\\n // ugly. redo without assembly?\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mask := sar(sub(_len, 1), 0x8000000000000000000000000000000000000000000000000000000000000000)\\n }\\n }\\n\\n /**\\n * @notice Return the null view.\\n * @return bytes29 - The null view\\n */\\n function nullView() internal pure returns (bytes29) {\\n return NULL;\\n }\\n\\n /**\\n * @notice Check if the view is null.\\n * @return bool - True if the view is null\\n */\\n function isNull(bytes29 memView) internal pure returns (bool) {\\n return memView == NULL;\\n }\\n\\n /**\\n * @notice Check if the view is not null.\\n * @return bool - True if the view is not null\\n */\\n function notNull(bytes29 memView) internal pure returns (bool) {\\n return !isNull(memView);\\n }\\n\\n /**\\n * @notice Check if the view is of a invalid type and points to a valid location\\n * in memory.\\n * @dev We perform this check by examining solidity's unallocated memory\\n * pointer and ensuring that the view's upper bound is less than that.\\n * @param memView The view\\n * @return ret - True if the view is invalid\\n */\\n function isNotValid(bytes29 memView) internal pure returns (bool ret) {\\n if (typeOf(memView) == 0xffffffffff) {\\n return true;\\n }\\n uint256 _end = end(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ret := gt(_end, mload(0x40))\\n }\\n }\\n\\n /**\\n * @notice Require that a typed memory view be valid.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @return bytes29 - The validated view\\n */\\n function assertValid(bytes29 memView) internal pure returns (bytes29) {\\n if (isNotValid(memView)) revert TypedMemView__assertValid_validityAssertionFailed();\\n return memView;\\n }\\n\\n /**\\n * @notice Return true if the memview is of the expected type. Otherwise false.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bool - True if the memview is of the expected type\\n */\\n function isType(bytes29 memView, uint40 _expected) internal pure returns (bool) {\\n return typeOf(memView) == _expected;\\n }\\n\\n /**\\n * @notice Require that a typed memory view has a specific type.\\n * @dev Returns the view for easy chaining.\\n * @param memView The view\\n * @param _expected The expected type\\n * @return bytes29 - The view with validated type\\n */\\n function assertType(bytes29 memView, uint40 _expected) internal pure returns (bytes29) {\\n if (!isType(memView, _expected)) {\\n revert TypedMemView__assertType_typeAssertionFailed(uint256(typeOf(memView)), uint256(_expected));\\n }\\n return memView;\\n }\\n\\n /**\\n * @notice Return an identical view with a different type.\\n * @param memView The view\\n * @param _newType The new type\\n * @return newView - The new view with the specified type\\n */\\n function castTo(bytes29 memView, uint40 _newType) internal pure returns (bytes29 newView) {\\n // then | in the new type\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // shift off the top 5 bytes\\n newView := or(and(memView, LOW_27_BYTES_MASK), shl(_27_BYTES_IN_BITS, _newType))\\n }\\n }\\n\\n /**\\n * @notice Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Unsafe raw pointer construction. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function unsafeBuildUnchecked(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) private pure returns (bytes29 newView) {\\n uint256 _uint96Bits = 96;\\n uint256 _emptyBits = 24;\\n\\n // Cast params to ensure input is of correct length\\n uint96 len_ = uint96(_len);\\n uint96 loc_ = uint96(_loc);\\n require(len_ == _len && loc_ == _loc, \\\"!truncated\\\");\\n\\n assembly {\\n // solium-disable-previous-line security/no-inline-assembly\\n newView := shl(_uint96Bits, _type) // insert type\\n newView := shl(_uint96Bits, or(newView, loc_)) // insert loc\\n newView := shl(_emptyBits, or(newView, len_)) // empty bottom 3 bytes\\n }\\n }\\n\\n /**\\n * @notice Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @dev Instantiate a new memory view. This should generally not be called\\n * directly. Prefer `ref` wherever possible.\\n * @param _type The type\\n * @param _loc The memory address\\n * @param _len The length\\n * @return newView - The new view with the specified type, location and length\\n */\\n function build(\\n uint256 _type,\\n uint256 _loc,\\n uint256 _len\\n ) internal pure returns (bytes29 newView) {\\n uint256 _end = _loc + _len;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n if gt(_end, mload(0x40)) {\\n _end := 0\\n }\\n }\\n if (_end == 0) {\\n return NULL;\\n }\\n newView = unsafeBuildUnchecked(_type, _loc, _len);\\n }\\n\\n /**\\n * @notice Instantiate a memory view from a byte array.\\n * @dev Note that due to Solidity memory representation, it is not possible to\\n * implement a deref, as the `bytes` type stores its len in memory.\\n * @param arr The byte array\\n * @param newType The type\\n * @return bytes29 - The memory view\\n */\\n function ref(bytes memory arr, uint40 newType) internal pure returns (bytes29) {\\n uint256 _len = arr.length;\\n\\n uint256 _loc;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _loc := add(arr, 0x20) // our view is of the data, not the struct\\n }\\n\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Return the associated type information.\\n * @param memView The memory view\\n * @return _type - The type associated with the view\\n */\\n function typeOf(bytes29 memView) internal pure returns (uint40 _type) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 216 == 256 - 40\\n _type := shr(_27_BYTES_IN_BITS, memView) // shift out lower 24 bytes\\n }\\n }\\n\\n /**\\n * @notice Return the memory address of the underlying bytes.\\n * @param memView The view\\n * @return _loc - The memory address\\n */\\n function loc(bytes29 memView) internal pure returns (uint96 _loc) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // 120 bits = 12 bytes (the encoded loc) + 3 bytes (empty low space)\\n _loc := and(shr(120, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice The number of memory words this memory view occupies, rounded up.\\n * @param memView The view\\n * @return uint256 - The number of memory words\\n */\\n function words(bytes29 memView) internal pure returns (uint256) {\\n return (uint256(len(memView)) + 31) / 32;\\n }\\n\\n /**\\n * @notice The in-memory footprint of a fresh copy of the view.\\n * @param memView The view\\n * @return uint256 - The in-memory footprint of a fresh copy of the view.\\n */\\n function footprint(bytes29 memView) internal pure returns (uint256) {\\n return words(memView) * 32;\\n }\\n\\n /**\\n * @notice The number of bytes of the view.\\n * @param memView The view\\n * @return _len - The length of the view\\n */\\n function len(bytes29 memView) internal pure returns (uint96 _len) {\\n uint256 _mask = LOW_12_MASK; // assembly can't use globals\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n _len := and(shr(24, memView), _mask)\\n }\\n }\\n\\n /**\\n * @notice Returns the endpoint of `memView`.\\n * @param memView The view\\n * @return uint256 - The endpoint of `memView`\\n */\\n function end(bytes29 memView) internal pure returns (uint256) {\\n unchecked {\\n return loc(memView) + len(memView);\\n }\\n }\\n\\n /**\\n * @notice Safe slicing without memory modification.\\n * @param memView The view\\n * @param _index The start index\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function slice(\\n bytes29 memView,\\n uint256 _index,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n uint256 _loc = loc(memView);\\n\\n // Ensure it doesn't overrun the view\\n if (_loc + _index + _len > end(memView)) {\\n return NULL;\\n }\\n\\n _loc = _loc + _index;\\n return build(newType, _loc, _len);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the first `_len` bytes.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function prefix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, 0, _len, newType);\\n }\\n\\n /**\\n * @notice Shortcut to `slice`. Gets a view representing the last `_len` byte.\\n * @param memView The view\\n * @param _len The length\\n * @param newType The new type\\n * @return bytes29 - The new view\\n */\\n function postfix(\\n bytes29 memView,\\n uint256 _len,\\n uint40 newType\\n ) internal pure returns (bytes29) {\\n return slice(memView, uint256(len(memView)) - _len, _len, newType);\\n }\\n\\n /**\\n * @notice Load up to 32 bytes from the view onto the stack.\\n * @dev Returns a bytes32 with only the `_bytes` highest bytes set.\\n * This can be immediately cast to a smaller fixed-length byte array.\\n * To automatically cast to an integer, use `indexUint`.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The 32 byte result\\n */\\n function index(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (bytes32 result) {\\n if (_bytes == 0) {\\n return bytes32(0);\\n }\\n if (_index + _bytes > len(memView)) {\\n // \\\"TypedMemView/index - Overran the view. Slice is at {loc} with length {len}. Attempted to index at offset {index} with length {slice},\\n revert TypedMemView__index_overrun(loc(memView), len(memView), _index, uint256(_bytes));\\n }\\n if (_bytes > 32) revert TypedMemView__index_indexMoreThan32Bytes();\\n\\n uint8 bitLength;\\n unchecked {\\n bitLength = _bytes * 8;\\n }\\n uint256 _loc = loc(memView);\\n uint256 _mask = leftMask(bitLength);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n result := and(mload(add(_loc, _index)), _mask)\\n }\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from the view at `_index`.\\n * @dev Requires that the view have >= `_bytes` bytes following that index.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return uint256(index(memView, _index, _bytes)) >> ((32 - _bytes) * 8);\\n }\\n\\n /**\\n * @notice Parse an unsigned integer from LE bytes.\\n * @param memView The view\\n * @param _index The index\\n * @param _bytes The bytes\\n * @return result - The unsigned integer\\n */\\n function indexLEUint(\\n bytes29 memView,\\n uint256 _index,\\n uint8 _bytes\\n ) internal pure returns (uint256 result) {\\n return reverseUint256(uint256(index(memView, _index, _bytes)));\\n }\\n\\n /**\\n * @notice Parse an address from the view at `_index`. Requires that the view have >= 20 bytes\\n * following that index.\\n * @param memView The view\\n * @param _index The index\\n * @return address - The address\\n */\\n function indexAddress(bytes29 memView, uint256 _index) internal pure returns (address) {\\n return address(uint160(indexUint(memView, _index, 20)));\\n }\\n\\n /**\\n * @notice Return the keccak256 hash of the underlying memory\\n * @param memView The view\\n * @return digest - The keccak256 hash of the underlying memory\\n */\\n function keccak(bytes29 memView) internal pure returns (bytes32 digest) {\\n uint256 _loc = loc(memView);\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n digest := keccak256(_loc, _len)\\n }\\n }\\n\\n /**\\n * @notice Return true if the underlying memory is equal. Else false.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the underlying memory is equal\\n */\\n function untypedEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return (loc(left) == loc(right) && len(left) == len(right)) || keccak(left) == keccak(right);\\n }\\n\\n /**\\n * @notice Return false if the underlying memory is equal. Else true.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - False if the underlying memory is equal\\n */\\n function untypedNotEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !untypedEqual(left, right);\\n }\\n\\n /**\\n * @notice Compares type equality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are the same\\n */\\n function equal(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return left == right || (typeOf(left) == typeOf(right) && keccak(left) == keccak(right));\\n }\\n\\n /**\\n * @notice Compares type inequality.\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param left The first view\\n * @param right The second view\\n * @return bool - True if the types are not the same\\n */\\n function notEqual(bytes29 left, bytes29 right) internal pure returns (bool) {\\n return !equal(left, right);\\n }\\n\\n /**\\n * @notice Copy the view to a location, return an unsafe memory reference\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memView The view\\n * @param _newLoc The new location\\n * @return written - the unsafe memory reference\\n */\\n function unsafeCopyTo(bytes29 memView, uint256 _newLoc) private view returns (bytes29 written) {\\n if (isNull(memView)) revert TypedMemView__unsafeCopyTo_nullPointer();\\n if (isNotValid(memView)) revert TypedMemView__unsafeCopyTo_invalidPointer();\\n\\n uint256 _len = len(memView);\\n uint256 _oldLoc = loc(memView);\\n\\n uint256 ptr;\\n bool res;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _newLoc) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n\\n // use the identity precompile to copy\\n // guaranteed not to fail, so pop the success\\n res := staticcall(gas(), 4, _oldLoc, _len, _newLoc, _len)\\n }\\n if (!res) revert TypedMemView__unsafeCopyTo_identityOOG();\\n written = unsafeBuildUnchecked(typeOf(memView), _newLoc, _len);\\n }\\n\\n /**\\n * @notice Copies the referenced memory to a new loc in memory, returning a `bytes` pointing to\\n * the new memory\\n * @dev Shortcuts if the pointers are identical, otherwise compares type and digest.\\n * @param memView The view\\n * @return ret - The view pointing to the new memory\\n */\\n function clone(bytes29 memView) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n uint256 _len = len(memView);\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n ret := ptr\\n }\\n unchecked {\\n unsafeCopyTo(memView, ptr + 0x20);\\n }\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n mstore(0x40, add(add(ptr, _len), 0x20)) // write new unused pointer\\n mstore(ptr, _len) // write len of new array (in bytes)\\n }\\n }\\n\\n /**\\n * @notice Join the views in memory, return an unsafe reference to the memory.\\n * @dev Super Dangerous direct memory access.\\n *\\n * This reference can be overwritten if anything else modifies memory (!!!).\\n * As such it MUST be consumed IMMEDIATELY.\\n * This function is private to prevent unsafe usage by callers.\\n * @param memViews The views\\n * @return unsafeView - The conjoined view pointing to the new memory\\n */\\n function unsafeJoin(bytes29[] memory memViews, uint256 _location) private view returns (bytes29 unsafeView) {\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n let ptr := mload(0x40)\\n // revert if we're writing in occupied memory\\n if gt(ptr, _location) {\\n revert(0x60, 0x20) // empty revert message\\n }\\n }\\n\\n uint256 _offset = 0;\\n uint256 _len = memViews.length;\\n for (uint256 i = 0; i < _len; ) {\\n bytes29 memView = memViews[i];\\n unchecked {\\n unsafeCopyTo(memView, _location + _offset);\\n _offset += len(memView);\\n ++i;\\n }\\n }\\n unsafeView = unsafeBuildUnchecked(0, _location, _offset);\\n }\\n\\n /**\\n * @notice Produce the keccak256 digest of the concatenated contents of multiple views.\\n * @param memViews The views\\n * @return bytes32 - The keccak256 digest\\n */\\n function joinKeccak(bytes29[] memory memViews) internal view returns (bytes32) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n return keccak(unsafeJoin(memViews, ptr));\\n }\\n\\n /**\\n * @notice copies all views, joins them into a new bytearray.\\n * @param memViews The views\\n * @return ret - The new byte array\\n */\\n function join(bytes29[] memory memViews) internal view returns (bytes memory ret) {\\n uint256 ptr;\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n ptr := mload(0x40) // load unused memory pointer\\n }\\n\\n bytes29 _newView;\\n unchecked {\\n _newView = unsafeJoin(memViews, ptr + 0x20);\\n }\\n uint256 _written = len(_newView);\\n uint256 _footprint = footprint(_newView);\\n\\n assembly {\\n // solhint-disable-previous-line no-inline-assembly\\n // store the legnth\\n mstore(ptr, _written)\\n // new pointer is old + 0x20 + the footprint of the body\\n mstore(0x40, add(add(ptr, _footprint), 0x20))\\n ret := ptr\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17e335daf53b9cd26f13d480b2f1e4f6babf202e39a14089d97b23b1d5d737ff\",\"license\":\"MIT OR Apache-2.0\"}},\"version\":1}", "bytecode": "0x60806040523480156200001157600080fd5b50604051620059cb380380620059cb833981016040819052620000349162000987565b6040518060e0016040528082600001516001600160a01b0316815260200182602001516001600160a01b0316815260200182604001516001600160a01b0316815260200182606001516001600160a01b0316815260200182608001516001600160a01b0316815260200182610120015181526020018261010001518152506001600381905550620000cb336200029b60201b60201c565b8051620000d89062000300565b6020810151620000e89062000369565b6040810151620000f890620003d2565b606081015162000108906200043b565b60808101516200011890620004a4565b60a081015162000128906200050d565b60c081015162000138906200054f565b6040810151620001489062000591565b80602001516001600160a01b03166352a9674b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b1919062000ace565b6008805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555060a0810151620001e79062000626565b60e0810151620001f7906200068f565b61012081015162000208906200050d565b60c08101516200021890620006d1565b60005b8161014001515181101562000293576200027e826101400151828151811062000248576200024862000af3565b602002602001015183610160015183815181106200026a576200026a62000af3565b60200260200101516200073a60201b60201c565b806200028a8162000b09565b9150506200021b565b505062000b31565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b600754604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b600654604080516001600160a01b03808516825290921660208301527f711d2a81db157c0acede64f080708460163dfaddcd4266c2c609efb458d3e4c0910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b6009546040805183815260208101929092527f289d6927dc5ba66abb928c5be9d3aecd2baf7c8e89f1faec6a791b8b21589a5d910160405180910390a1600955565b600b546040805183815260208101929092527f2a1ca87adff1a64c5b6edc218dfd6b80208260b240fbc939ea43e07c2764f5ca910160405180910390a1600b55565b6001600160a01b0381166000908152600d602052604090205460ff1615620005cc57604051639e9dd41d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c5910160405180910390a150565b600e54604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600f546040805183815260208101929092527f5d93bbdda0d794fed18c39a7b776dc86cbf6ed443032e6baac71373996b85010910160405180910390a1600f55565b601154604080516001600160a01b03808516825290921660208301527f17da78d98886c3b8819430ab0693a44c32dfa6426a4db4601ce45bc4bc2385ec910160405180910390a1601180546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000818152601460209081526040918290205482516001600160a01b0387811682529091169181019190915280820192909252517ff3f83f3e1df056d9be522e74b3fe84add98c686289a646ae55708277434240929181900360600190a163ffffffff16600090815260146020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b60405161018081016001600160401b03811182821017156200080f576200080f620007d3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620008405762000840620007d3565b604052919050565b80516001600160a01b03811681146200086057600080fd5b919050565b60006001600160401b03821115620008815762000881620007d3565b5060051b60200190565b600082601f8301126200089d57600080fd5b81516020620008b6620008b08362000865565b62000815565b82815260059290921b84018101918181019086841115620008d657600080fd5b8286015b84811015620008fc57620008ee8162000848565b8352918301918301620008da565b509695505050505050565b805163ffffffff811681146200086057600080fd5b600082601f8301126200092e57600080fd5b8151602062000941620008b08362000865565b82815260059290921b840181019181810190868411156200096157600080fd5b8286015b84811015620008fc57620009798162000907565b835291830191830162000965565b6000602082840312156200099a57600080fd5b81516001600160401b0380821115620009b257600080fd5b908301906101808286031215620009c857600080fd5b620009d2620007e9565b620009dd8362000848565b8152620009ed6020840162000848565b602082015262000a006040840162000848565b604082015262000a136060840162000848565b606082015262000a266080840162000848565b608082015262000a3960a0840162000848565b60a082015262000a4c60c0840162000848565b60c082015260e0838101519082015261010080840151908201526101208084015190820152610140808401518381111562000a8657600080fd5b62000a94888287016200088b565b828401525050610160808401518381111562000aaf57600080fd5b62000abd888287016200091c565b918301919091525095945050505050565b60006020828403121562000ae157600080fd5b62000aec8262000907565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006001820162000b2a57634e487b7160e01b600052601160045260246000fd5b5060010190565b614e8a8062000b416000396000f3fe6080604052600436106103795760003560e01c80639c166c0b116101d1578063cf842be111610102578063dbd8848d116100a0578063e7dc20981161006f578063e7dc209814610aa9578063f0a67eba14610abf578063f3f91e8e14610adf578063fff01c4514610aff57600080fd5b8063dbd8848d14610a29578063dd39f00d14610a49578063de4b054814610a69578063e79457f114610a8957600080fd5b8063d6412ecb116100dc578063d6412ecb146109b3578063d9ef0bee146109c9578063db205635146109e9578063db40452214610a0957600080fd5b8063cf842be114610956578063d1851c9214610976578063d232c2201461099457600080fd5b8063b619d99f1161016f578063c415b95c11610149578063c415b95c146108e1578063c5b350df14610901578063caabc4c214610916578063ce9cec901461093657600080fd5b8063b619d99f14610868578063bfb4c78314610888578063c2fb26a6146108a857600080fd5b8063a42dce80116101ab578063a42dce80146107e8578063a91b8fb814610808578063b1f8100d14610828578063b4cef5461461084857600080fd5b80639c166c0b146107885780639cadce00146107a85780639f645a03146107c857600080fd5b8063622520bb116102ab57806389099717116102495780638e02f759116102235780638e02f759146107125780638efed12714610732578063931c0e78146107525780639a2652db1461076857600080fd5b806389099717146106b45780638c976851146106d45780638da5cb5b146106f457600080fd5b80636eba787f116102855780636eba787f14610649578063715018a614610669578063716907a71461067e57806382443e041461069457600080fd5b8063622520bb146105c5578063634c7bb5146106135780636a42b8f81461063357600080fd5b8063492a96f41161031857806351cff8d9116102f257806351cff8d91461054f578063529100391461056f5780635e21966a1461058557806360f0a5ac146105a557600080fd5b8063492a96f4146104ef5780634cc18e571461050f5780634d6f20131461052f57600080fd5b8063214444331161035457806321444433146104665780632d484bcc1461048a5780632f55b98d146104aa5780633cf52ffb146104da57600080fd5b806254a4fb146103bd57806315fa23bc146104045780631acde6281461041b57600080fd5b366103b857604080513481524760208201527f063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb910160405180910390a1005b600080fd5b3480156103c957600080fd5b506103ed6103d8366004613748565b60126020526000908152604090205460ff1681565b60405160ff90911681526020015b60405180910390f35b34801561041057600080fd5b50610419610b1f565b005b34801561042757600080fd5b5061045661043636600461377e565b601360209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016103fb565b34801561047257600080fd5b5061047c60105481565b6040519081526020016103fb565b34801561049657600080fd5b506104196104a53660046137a8565b610b89565b3480156104b657600080fd5b506104566104c53660046137d8565b600d6020526000908152604090205460ff1681565b3480156104e657600080fd5b5060025461047c565b3480156104fb57600080fd5b5061047c61050a366004613a2c565b610bc0565b34801561051b57600080fd5b5061041961052a3660046137d8565b610c52565b34801561053b57600080fd5b5061041961054a3660046137d8565b610cb2565b34801561055b57600080fd5b5061041961056a3660046137d8565b610d0e565b34801561057b57600080fd5b5061047c60095481565b34801561059157600080fd5b506104196105a03660046137d8565b610e87565b3480156105b157600080fd5b506104196105c03660046137d8565b610ee3565b3480156105d157600080fd5b506105fb6105e0366004613ad2565b6014602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103fb565b34801561061f57600080fd5b506006546105fb906001600160a01b031681565b34801561063f57600080fd5b5062093a8061047c565b34801561065557600080fd5b506004546105fb906001600160a01b031681565b34801561067557600080fd5b50610419610f3f565b34801561068a57600080fd5b5061047c600b5481565b3480156106a057600080fd5b506104196106af366004613aed565b610ff3565b3480156106c057600080fd5b506104196106cf3660046137d8565b611028565b3480156106e057600080fd5b506104196106ef366004613b2a565b611084565b34801561070057600080fd5b506000546001600160a01b03166105fb565b34801561071e57600080fd5b5061041961072d366004613bbd565b6112a3565b34801561073e57600080fd5b5061047c61074d366004613be9565b61135a565b34801561075e57600080fd5b5061047c600c5481565b34801561077457600080fd5b50610419610783366004613c24565b611420565b34801561079457600080fd5b506011546105fb906001600160a01b031681565b3480156107b457600080fd5b506008546105fb906001600160a01b031681565b3480156107d457600080fd5b506104196107e33660046137d8565b6114e3565b3480156107f457600080fd5b506104196108033660046137d8565b61153f565b34801561081457600080fd5b50610419610823366004613cbf565b61159b565b34801561083457600080fd5b506104196108433660046137d8565b6115fd565b34801561085457600080fd5b506104196108633660046137a8565b61169b565b34801561087457600080fd5b50610419610883366004613cf2565b6116cf565b34801561089457600080fd5b506104196108a3366004613d98565b61194a565b3480156108b457600080fd5b506008546108cc90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016103fb565b3480156108ed57600080fd5b506005546105fb906001600160a01b031681565b34801561090d57600080fd5b50610419611998565b34801561092257600080fd5b50610419610931366004613e20565b611a08565b34801561094257600080fd5b50610456610951366004613e77565b611b00565b34801561096257600080fd5b50610419610971366004613f0e565b611c59565b34801561098257600080fd5b506001546001600160a01b03166105fb565b3480156109a057600080fd5b506000546001600160a01b031615610456565b3480156109bf57600080fd5b5061047c600a5481565b3480156109d557600080fd5b506104196109e4366004613f30565b611d08565b3480156109f557600080fd5b50600e546105fb906001600160a01b031681565b348015610a1557600080fd5b50610419610a243660046137a8565b611de1565b348015610a3557600080fd5b50610419610a44366004613d98565b611e15565b348015610a5557600080fd5b50610419610a643660046137d8565b611feb565b348015610a7557600080fd5b506007546105fb906001600160a01b031681565b348015610a9557600080fd5b50610419610aa4366004613f7d565b612047565b348015610ab557600080fd5b5061047c600f5481565b348015610acb57600080fd5b50610419610ada3660046137d8565b612104565b348015610aeb57600080fd5b50610419610afa366004613cf2565b612160565b348015610b0b57600080fd5b5061047c610b1a366004613a2c565b612259565b600e60009054906101000a90046001600160a01b03166001600160a01b03166315fa23bc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314610bb4576040516311a8a1bb60e31b815260040160405180910390fd5b610bbd81612481565b50565b336000908152600d602052604081205460ff16610bf057604051633cb4b93960e01b815260040160405180910390fd5b600f54601054610c00919061400a565b421015610c2057604051630962070b60e21b815260040160405180910390fd5b610c286124c3565b610c3788888888888888612521565b9050610c436001600355565b42601055979650505050505050565b6000546001600160a01b03163314610c7d576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610ca55760405163b04f8dcf60e01b815260040160405180910390fd5b610cae826125e8565b5050565b6000546001600160a01b03163314610cdd576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610d055760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82612651565b6000546001600160a01b03163314610d39576040516311a8a1bb60e31b815260040160405180910390fd5b610d416124c3565b60006001600160a01b03821615610dbf576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dba919061401d565b610dc1565b475b90506001600160a01b038216610de057610ddb33826126ba565b610e53565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e519190614044565b505b600080516020614e35833981519152828283604051610e7493929190614061565b60405180910390a150610bbd6001600355565b6000546001600160a01b03163314610eb2576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610eda5760405163b04f8dcf60e01b815260040160405180910390fd5b610cae826127d3565b6000546001600160a01b03163314610f0e576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610f365760405163b04f8dcf60e01b815260040160405180910390fd5b610cae8261283c565b6000546001600160a01b03163314610f6a576040516311a8a1bb60e31b815260040160405180910390fd5b62093a8060025442610f7c9190614082565b11610f9a576040516324e0285f60e21b815260040160405180910390fd5b600254600003610fbd57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b031615610fe7576040516323295ef960e01b815260040160405180910390fd5b610ff160006128cd565b565b6000546001600160a01b0316331461101e576040516311a8a1bb60e31b815260040160405180910390fd5b610cae8282612932565b6000546001600160a01b03163314611053576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661107b5760405163b04f8dcf60e01b815260040160405180910390fd5b610cae826129fa565b60115460009033906001600160a01b031681148015906110dd5750601260008360038111156110b5576110b5614095565b60038111156110c6576110c6614095565b815260208101919091526040016000205460ff1615155b801561113c57506001601260008460038111156110fc576110fc614095565b600381111561110d5761110d614095565b815260208101919091526040016000205461112b919060ff166140ab565b60ff16611139600a436140c4565b11155b1561115a5760405163114c214760e01b815260040160405180910390fd5b6006546040516335d2155560e11b81523360048201819052916001600160a01b031690636ba42aaa906024016020604051808303816000875af11580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c99190614044565b6111e6576040516334985ed360e01b815260040160405180910390fd5b600f546010546111f6919061400a565b42101561121657604051630962070b60e21b815260040160405180910390fd5b61121e6124c3565b61122b8888888888612a63565b506112366001600355565b426010556006546040516317fbade560e21b81526001600160a01b03838116600483015290911690635feeb79490602401600060405180830381600087803b15801561128157600080fd5b505af1158015611295573d6000803e3d6000fd5b505050505050505050505050565b600b54600c546112b3919061400a565b4210156112d357604051630c0e333560e11b815260040160405180910390fd5b6112db6124c3565b600854604051638e02f75960e01b81526004810185905260248101849052604481018390526001600160a01b0390911690638e02f75990606401600060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b505050506113516001600355565b505042600c5550565b336000908152600d602052604081205460ff1661138a57604051633cb4b93960e01b815260040160405180910390fd5b6113926124c3565b6007546040516331f1f3e960e11b81526001600160a01b03909116906363e3e7d2906113c290869060040161424b565b6020604051808303816000875af11580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611405919061401d565b905061141082612b24565b61141a6001600355565b92915050565b336000908152600d602052604090205460ff1661145057604051633cb4b93960e01b815260040160405180910390fd5b600f54601054611460919061400a565b42101561148057604051630962070b60e21b815260040160405180910390fd5b6114886124c3565b60006114978787878787612a63565b9050600080516020614e35833981519152600082476040516114bb93929190614061565b60405180910390a16114cc82612b24565b506114d76001600355565b50504260105550505050565b6000546001600160a01b0316331461150e576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166115365760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82612b88565b6000546001600160a01b0316331461156a576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166115925760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82612bf1565b6000546001600160a01b031633146115c6576040516311a8a1bb60e31b815260040160405180910390fd5b816001600160a01b0381166115ee5760405163b04f8dcf60e01b815260040160405180910390fd5b6115f88383612c5a565b505050565b6000546001600160a01b03163314611628576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611646575060025415155b15611664576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361169257604051634a2fb73f60e11b815260040160405180910390fd5b610bbd81612cf3565b6000546001600160a01b031633146116c6576040516311a8a1bb60e31b815260040160405180910390fd5b610bbd81612d41565b60115460029033906001600160a01b0316811480159061172857506012600083600381111561170057611700614095565b600381111561171157611711614095565b815260208101919091526040016000205460ff1615155b8015611787575060016012600084600381111561174757611747614095565b600381111561175857611758614095565b8152602081019190915260400160002054611776919060ff166140ab565b60ff16611784600a436140c4565b11155b156117a55760405163114c214760e01b815260040160405180910390fd5b6006546040516335d2155560e11b81523360048201819052916001600160a01b031690636ba42aaa906024016020604051808303816000875af11580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190614044565b611831576040516334985ed360e01b815260040160405180910390fd5b600954600a54611841919061400a565b4210156118615760405163923904d960e01b815260040160405180910390fd5b61186f8a8a600a5487612d83565b600e54604051630892003960e01b81526001600160a01b03909116906308920039906118a9908d908d908d908d908d908d90600401614470565b600060405180830381600087803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b505042600a5550506006546040516317fbade560e21b81526001600160a01b03838116600483015290911690635feeb79490602401600060405180830381600087803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b5050505050505050505050505050565b336000908152600d602052604090205460ff1661197a57604051633cb4b93960e01b815260040160405180910390fd5b6119826124c3565b61198e84848484612e83565b610b836001600355565b6001546001600160a01b031633146119c3576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426119d59190614082565b116119f3576040516324e0285f60e21b815260040160405180910390fd5b600154610ff1906001600160a01b03166128cd565b336000908152600d602052604090205460ff16611a3857604051633cb4b93960e01b815260040160405180910390fd5b600954600a54611a48919061400a565b421015611a685760405163923904d960e01b815260040160405180910390fd5b611a706124c3565b611a7e8484600a5485613237565b60085460405163111c183760e01b815260048101869052602481018590526001600160a01b039091169063111c183790604401600060405180830381600087803b158015611acb57600080fd5b505af1158015611adf573d6000803e3d6000fd5b50505050611aec81612b24565b611af66001600355565b505042600a555050565b600e546040805163957908d160e01b8152815160009384936001600160a01b039091169263957908d19260048083019392829003018187875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f91906144db565b5090506000805b8451811015611c3457600e54855184916001600160a01b03169063f715589a90889085908110611ba857611ba86144ff565b60200260200101516040518263ffffffff1660e01b8152600401611bd8919063ffffffff91909116815260200190565b602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c19919061401d565b1415915081611c345780611c2c81614515565b915050611b76565b50808015611c515750600f54601054611c4d919061400a565b4210155b949350505050565b600b54600c54611c69919061400a565b421015611c8957604051630c0e333560e11b815260040160405180910390fd5b611c916124c3565b600e5460405163e9812d7160e01b815260048101849052602481018390526001600160a01b039091169063e9812d7190604401600060405180830381600087803b158015611cde57600080fd5b505af1158015611cf2573d6000803e3d6000fd5b50505050611d006001600355565b505042600c55565b336000908152600d602052604090205460ff16611d3857604051633cb4b93960e01b815260040160405180910390fd5b611d406124c3565b600854604051630aec6b9f60e21b81526001600160a01b0390911690632bb1ae7c908490611d72908790600401614574565b6000604051808303818588803b158015611d8b57600080fd5b505af1158015611d9f573d6000803e3d6000fd5b5050505050600080516020614e3583398151915260008347604051611dc693929190614061565b60405180910390a1611dd781612b24565b6115f86001600355565b6000546001600160a01b03163314611e0c576040516311a8a1bb60e31b815260040160405180910390fd5b610bbd81613331565b60115460019033906001600160a01b03168114801590611e6e575060126000836003811115611e4657611e46614095565b6003811115611e5757611e57614095565b815260208101919091526040016000205460ff1615155b8015611ecd5750600160126000846003811115611e8d57611e8d614095565b6003811115611e9e57611e9e614095565b8152602081019190915260400160002054611ebc919060ff166140ab565b60ff16611eca600a436140c4565b11155b15611eeb5760405163114c214760e01b815260040160405180910390fd5b6006546040516335d2155560e11b81523360048201819052916001600160a01b031690636ba42aaa906024016020604051808303816000875af1158015611f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5a9190614044565b611f77576040516334985ed360e01b815260040160405180910390fd5b611f8387878787612e83565b6006546040516317fbade560e21b81526001600160a01b03838116600483015290911690635feeb79490602401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b03163314612016576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661203e5760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82613373565b336000908152600d602052604090205460ff1661207757604051633cb4b93960e01b815260040160405180910390fd5b61207f6124c3565b60085460405163508a109b60e01b81526001600160a01b039091169063508a109b906120b79089908990899089908990600401614591565b600060405180830381600087803b1580156120d157600080fd5b505af11580156120e5573d6000803e3d6000fd5b505050506120f281612b24565b6120fc6001600355565b505050505050565b6000546001600160a01b0316331461212f576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166121575760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82613401565b336000908152600d602052604090205460ff1661219057604051633cb4b93960e01b815260040160405180910390fd5b600954600a546121a0919061400a565b4210156121c05760405163923904d960e01b815260040160405180910390fd5b6121c86124c3565b6121d68787600a5484612d83565b600e54604051630892003960e01b81526001600160a01b0390911690630892003990612210908a908a908a908a908a908a90600401614470565b600060405180830381600087803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b5050505061224c6001600355565b505042600a555050505050565b601154600090819033906001600160a01b031681148015906122b457506012600083600381111561228c5761228c614095565b600381111561229d5761229d614095565b815260208101919091526040016000205460ff1615155b801561231357506001601260008460038111156122d3576122d3614095565b60038111156122e4576122e4614095565b8152602081019190915260400160002054612302919060ff166140ab565b60ff16612310600a436140c4565b11155b156123315760405163114c214760e01b815260040160405180910390fd5b6006546040516335d2155560e11b81523360048201819052916001600160a01b031690636ba42aaa906024016020604051808303816000875af115801561237c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a09190614044565b6123bd576040516334985ed360e01b815260040160405180910390fd5b600f546010546123cd919061400a565b4210156123ed57604051630962070b60e21b815260040160405180910390fd5b6123f56124c3565b6124048b8b8b8b8b8b8b612521565b93506124106001600355565b426010556006546040516317fbade560e21b81526001600160a01b03838116600483015290911690635feeb79490602401600060405180830381600087803b15801561245b57600080fd5b505af115801561246f573d6000803e3d6000fd5b50505050505050979650505050505050565b600f546040805183815260208101929092527f5d93bbdda0d794fed18c39a7b776dc86cbf6ed443032e6baac71373996b85010910160405180910390a1600f55565b60026003540361251a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600355565b60008087815b818163ffffffff1610156125695788888263ffffffff1681811061254d5761254d6144ff565b905060200201358361255f919061400a565b9250600101612527565b50600e5460405163124aa5bd60e21b81526001600160a01b039091169063492a96f49084906125a8908e908e908e908e908e908e908e906004016146d7565b6000604051808303818588803b1580156125c157600080fd5b505af11580156125d5573d6000803e3d6000fd5b50949d9c50505050505050505050505050565b600654604080516001600160a01b03808516825290921660208301527f711d2a81db157c0acede64f080708460163dfaddcd4266c2c609efb458d3e4c0910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600754604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b8047101561270a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401612511565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612757576040519150601f19603f3d011682016040523d82523d6000602084013e61275c565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401612511565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600d602052604090205460ff166128755760405163092a8e7160e41b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b91015b60405180910390a150565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b7f2cf410431a72dc4bf0cc68af378641831e086686f41d275c16b60799824af83b82826012600086600381111561296b5761296b614095565b600381111561297c5761297c614095565b8152602081019190915260409081016000205490516129a093929160ff1690614729565b60405180910390a180601260008460038111156129bf576129bf614095565b60038111156129d0576129d0614095565b815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b601154604080516001600160a01b03808516825290921660208301527f17da78d98886c3b8819430ab0693a44c32dfa6426a4db4601ce45bc4bc2385ec910160405180910390a1601180546001600160a01b0319166001600160a01b0392909216919091179055565b60008085815b818163ffffffff161015612aab5786868263ffffffff16818110612a8f57612a8f6144ff565b9050602002013583612aa1919061400a565b9250600101612a69565b50600e5460405163412e12db60e01b81526001600160a01b039091169063412e12db908490612ae6908c908c908c908c908c90600401614763565b6000604051808303818588803b158015612aff57600080fd5b505af1158015612b13573d6000803e3d6000fd5b50949b9a5050505050505050505050565b80600003612b2f5750565b6004546001600160a01b03163303612b5c57600554612b57906001600160a01b0316826126ba565b612b66565b612b6633826126ba565b600080516020614e35833981519152600082476040516128c293929190614061565b600854604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000818152601460209081526040918290205482516001600160a01b0387811682529091169181019190915280820192909252517ff3f83f3e1df056d9be522e74b3fe84add98c686289a646ae55708277434240929181900360600190a163ffffffff16600090815260146020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600b546040805183815260208101929092527f2a1ca87adff1a64c5b6edc218dfd6b80208260b240fbc939ea43e07c2764f5ca910160405180910390a1600b55565b600854604080516020810187905290810185905260608101849052600160a01b90910460e01b6001600160e01b03191660808201526000906084016040516020818303038152906040528051906020012090506000612deb83612de58461346a565b906134bd565b600e54604051632516d8ed60e11b81526001600160a01b038084166004830152929350911690634a2db1da90602401602060405180830381865afa158015612e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5b9190614044565b6120fc5760405163af1cef3f60e01b81526001600160a01b0382166004820152602401612511565b63ffffffff8216600090815260136020908152604080832084845290915290205460ff1615612ec5576040516320a413f360e01b815260040160405180910390fd5b63ffffffff82166000908152601460205260409020546001600160a01b0316612f0157604051636617d23960e01b815260040160405180910390fd5b63ffffffff821660008181526013602090815260408083208584529091529020805460ff1916600117905560641480612f41575063ffffffff82166127d8145b15612fd8576000612f54848601866147aa565b63ffffffff8416600090815260146020908152604091829020548351918401519251633f7658fd60e01b81529394506001600160a01b031692633f7658fd92612fa09291600401614850565b600060405180830381600087803b158015612fba57600080fd5b505af1158015612fce573d6000803e3d6000fd5b5050505050610b83565b63ffffffff821661a4b11480612ff6575063ffffffff821662066eed145b1561306b57600061300984860186614981565b63ffffffff841660009081526014602090815260409182902054835191840151838501516060860151608087015160a08801519651632750dce960e21b81529798506001600160a01b0390941696639d4373a496612fa0969591600401614a70565b63ffffffff8216600a1480613087575063ffffffff82166101a4145b156130f257600061309a84860186614b59565b63ffffffff8416600090815260146020908152604091829020548351918401518385015160608601519451637049138f60e01b81529596506001600160a01b0390921694637049138f94612fa0949391600401614c71565b63ffffffff8216610144148061310f575063ffffffff8216610118145b1561317f57600061312284860186614d1a565b63ffffffff8416600090815260146020908152604091829020548351918401518385015160608601516080870151955163e92a492f60e01b81529697506001600160a01b039093169563e92a492f95612fa0959491600401614ddf565b63ffffffff82166089148061319c575063ffffffff821662013881145b1561321e5763ffffffff82166000908152601460205260409081902054905163f953cec760e01b81526001600160a01b039091169063f953cec7906131e79087908790600401614e20565b600060405180830381600087803b15801561320157600080fd5b505af1158015613215573d6000803e3d6000fd5b50505050610b83565b60405163d3f4d63b60e01b815260040160405180910390fd5b600854604080516020810187905290810185905260608101849052600160a01b90910460e01b6001600160e01b0319166080820152600090608401604051602081830303815290604052805190602001209050600061329983612de58461346a565b600854604051632516d8ed60e11b81526001600160a01b038084166004830152929350911690634a2db1da90602401602060405180830381865afa1580156132e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133099190614044565b6120fc57604051634810638b60e01b81526001600160a01b0382166004820152602401612511565b6009546040805183815260208101929092527f289d6927dc5ba66abb928c5be9d3aecd2baf7c8e89f1faec6a791b8b21589a5d910160405180910390a1600955565b6001600160a01b0381166000908152600d602052604090205460ff16156133ad57604051639e9dd41d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c591016128c2565b600e54604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008060006134cc85856134e1565b915091506134d981613526565b509392505050565b60008082516041036135175760208301516040840151606085015160001a61350b87828585613670565b9450945050505061351f565b506000905060025b9250929050565b600081600481111561353a5761353a614095565b036135425750565b600181600481111561355657613556614095565b036135a35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401612511565b60028160048111156135b7576135b7614095565b036136045760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401612511565b600381600481111561361857613618614095565b03610bbd5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401612511565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156136a7575060009050600361372b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156136fb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166137245760006001925092505061372b565b9150600090505b94509492505050565b80356004811061374357600080fd5b919050565b60006020828403121561375a57600080fd5b61376382613734565b9392505050565b803563ffffffff8116811461374357600080fd5b6000806040838503121561379157600080fd5b61379a8361376a565b946020939093013593505050565b6000602082840312156137ba57600080fd5b5035919050565b80356001600160a01b038116811461374357600080fd5b6000602082840312156137ea57600080fd5b613763826137c1565b60008083601f84011261380557600080fd5b5081356001600160401b0381111561381c57600080fd5b6020830191508360208260051b850101111561351f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561386f5761386f613837565b60405290565b60405160c081016001600160401b038111828210171561386f5761386f613837565b604051608081016001600160401b038111828210171561386f5761386f613837565b60405160a081016001600160401b038111828210171561386f5761386f613837565b604051601f8201601f191681016001600160401b038111828210171561390357613903613837565b604052919050565b60006001600160401b0382111561392457613924613837565b5060051b60200190565b600082601f83011261393f57600080fd5b81356001600160401b0381111561395857613958613837565b61396b601f8201601f19166020016138db565b81815284602083860101111561398057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126139ae57600080fd5b813560206139c36139be8361390b565b6138db565b82815260059290921b840181019181810190868411156139e257600080fd5b8286015b84811015613a215780356001600160401b03811115613a055760008081fd5b613a138986838b010161392e565b8452509183019183016139e6565b509695505050505050565b600080600080600080600060a0888a031215613a4757600080fd5b87356001600160401b0380821115613a5e57600080fd5b613a6a8b838c016137f3565b909950975060208a0135915080821115613a8357600080fd5b613a8f8b838c016137f3565b909750955060408a0135915080821115613aa857600080fd5b50613ab58a828b0161399d565b935050606088013591506080880135905092959891949750929550565b600060208284031215613ae457600080fd5b6137638261376a565b60008060408385031215613b0057600080fd5b613b0983613734565b9150602083013560ff81168114613b1f57600080fd5b809150509250929050565b600080600080600060608688031215613b4257600080fd5b85356001600160401b0380821115613b5957600080fd5b613b6589838a016137f3565b90975095506020880135915080821115613b7e57600080fd5b613b8a89838a016137f3565b90955093506040880135915080821115613ba357600080fd5b50613bb08882890161399d565b9150509295509295909350565b600080600060608486031215613bd257600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613bfc57600080fd5b82356001600160401b03811115613c1257600080fd5b830160a0818603121561379a57600080fd5b60008060008060008060808789031215613c3d57600080fd5b86356001600160401b0380821115613c5457600080fd5b613c608a838b016137f3565b90985096506020890135915080821115613c7957600080fd5b613c858a838b016137f3565b90965094506040890135915080821115613c9e57600080fd5b50613cab89828a0161399d565b925050606087013590509295509295509295565b60008060408385031215613cd257600080fd5b613cdb836137c1565b9150613ce96020840161376a565b90509250929050565b600080600080600080600060a0888a031215613d0d57600080fd5b873596506020880135955060408801356001600160401b0380821115613d3257600080fd5b613d3e8b838c016137f3565b909750955060608a0135915080821115613d5757600080fd5b613d638b838c016137f3565b909550935060808a0135915080821115613d7c57600080fd5b50613d898a828b0161392e565b91505092959891949750929550565b60008060008060608587031215613dae57600080fd5b84356001600160401b0380821115613dc557600080fd5b818701915087601f830112613dd957600080fd5b813581811115613de857600080fd5b886020828501011115613dfa57600080fd5b602092830196509450613e10918701905061376a565b9396929550929360400135925050565b60008060008060808587031215613e3657600080fd5b843593506020850135925060408501356001600160401b03811115613e5a57600080fd5b613e668782880161392e565b949793965093946060013593505050565b60006020808385031215613e8a57600080fd5b82356001600160401b03811115613ea057600080fd5b8301601f81018513613eb157600080fd5b8035613ebf6139be8261390b565b81815260059190911b82018301908381019087831115613ede57600080fd5b928401925b82841015613f0357613ef48461376a565b82529284019290840190613ee3565b979650505050505050565b60008060408385031215613f2157600080fd5b50508035926020909101359150565b600080600060608486031215613f4557600080fd5b83356001600160401b03811115613f5b57600080fd5b613f678682870161392e565b9660208601359650604090950135949350505050565b6000806000806000806104808789031215613f9757600080fd5b86356001600160401b03811115613fad57600080fd5b613fb989828a016137f3565b90975095505060208701359350610440870188811115613fd857600080fd5b9598949750929560408101953594610460909101359350915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561141a5761141a613ff4565b60006020828403121561402f57600080fd5b5051919050565b8015158114610bbd57600080fd5b60006020828403121561405657600080fd5b815161376381614036565b6001600160a01b039390931683526020830191909152604082015260600190565b8181038181111561141a5761141a613ff4565b634e487b7160e01b600052602160045260246000fd5b60ff828116828216039081111561141a5761141a613ff4565b6000826140e157634e487b7160e01b600052601260045260246000fd5b500690565b803561374381614036565b6000808335601e1984360301811261410857600080fd5b83016020810192503590506001600160401b0381111561412757600080fd5b80360382131561351f57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261417657600080fd5b83016020810192503590506001600160401b0381111561419557600080fd5b8060051b360382131561351f57600080fd5b8183526000602080850194508260005b858110156141e3576001600160a01b036141d0836137c1565b16875295820195908201906001016141b7565b509495945050505050565b81835260006020808501808196508560051b810191508460005b8781101561423e57828403895261421f82886140f1565b61422a868284614136565b9a87019a9550505090840190600101614208565b5091979650505050505050565b602081526000823561019e1984360301811261426657600080fd5b60a06020840152830161428960c0840161427f8361376a565b63ffffffff169052565b6142956020820161376a565b63ffffffff1660e08401526142ac6040820161376a565b6101006142c08186018363ffffffff169052565b6142cc606084016137c1565b91506101206142e5818701846001600160a01b03169052565b6142f1608085016137c1565b925061014061430a818801856001600160a01b03169052565b61431660a086016140e6565b93506101606143288189018615159052565b61433560c08701876140f1565b95506101a061018081818c01526143516102608c018985614136565b975060e0890135828c0152614367878a016137c1565b6001600160a01b03166101c08c0152948801356101e08b0152505090850135610200880152840135610220870152830135610240860152506143ac602086018661415f565b9250601f19808684030160408701526143c68385846141a7565b93506143d5604088018861415f565b93509150808685030160608701526143ee8484846141ee565b93506143fc606088016137c1565b6001600160a01b0381166080880152925061441a60808801886140f1565b93509150808685030160a087015250614434838383614136565b9695505050505050565b81835260006001600160fb1b0383111561445757600080fd5b8260051b80836020870137939093016020019392505050565b8681526000602087818401526080604084015261449160808401878961443e565b83810360608501528481528590820160005b868110156144cc5763ffffffff6144b98461376a565b16825291830191908301906001016144a3565b509a9950505050505050505050565b600080604083850312156144ee57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b60006001820161452757614527613ff4565b5060010190565b6000815180845260005b8181101561455457602081850181015186830182015201614538565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000613763602083018461452e565b6104008183375050565b6104608082528101859052600061048080830190600588901b8401018883805b8a8110156146275786840361047f190185528235368d900361043e190181126145d8578283fd5b8c016104406145e782806140f1565b8288526145f78389018284614136565b925050506020610400818401828901376104209283013596909201959095529485019492909201916001016145b1565b50505080925050508460208301526146426040830185614587565b826104408301529695505050505050565b8183526000602080850194508260005b858110156141e3576001600160a01b0361467c836137c1565b1687529582019590820190600101614663565b600081518084526020808501808196508360051b8101915082860160005b8581101561423e5782840389526146c584835161452e565b988501989350908401906001016146ad565b60a0815260006146eb60a08301898b614653565b82810360208401526146fe81888a61443e565b90508281036040840152614712818761468f565b606084019590955250506080015295945050505050565b606081016004851061474b57634e487b7160e01b600052602160045260246000fd5b93815260ff9283166020820152911660409091015290565b606081526000614777606083018789614653565b828103602084015261478a81868861443e565b9050828103604084015261479e818561468f565b98975050505050505050565b6000602082840312156147bc57600080fd5b81356001600160401b03808211156147d357600080fd5b90830190604082860312156147e757600080fd5b60405160408101818110838211171561480257614802613837565b60405282358281111561481457600080fd5b6148208782860161392e565b82525060208301358281111561483557600080fd5b6148418782860161392e565b60208301525095945050505050565b604081526000614863604083018561452e565b8281036020840152614875818561452e565b95945050505050565b80356001600160401b038116811461374357600080fd5b600082601f8301126148a657600080fd5b813560206148b66139be8361390b565b82815260059290921b840181019181810190868411156148d557600080fd5b8286015b84811015613a2157803583529183019183016148d9565b600060e0828403121561490257600080fd5b61490a61384d565b9050614915826137c1565b8152614923602083016137c1565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c08201356001600160401b0381111561496957600080fd5b6149758482850161392e565b60c08301525092915050565b60006020828403121561499357600080fd5b81356001600160401b03808211156149aa57600080fd5b9083019060c082860312156149be57600080fd5b6149c6613875565b6149cf8361487e565b815260208301356020820152604083013560408201526060830135828111156149f757600080fd5b614a0387828601614895565b6060830152506080830135608082015260a083013582811115614a2557600080fd5b614a31878286016148f0565b60a08301525095945050505050565b600081518084526020808501945080840160005b838110156141e357815187529582019590820190600101614a54565b6001600160401b038716815285602082015284604082015260c060608201526000614a9e60c0830186614a40565b84608084015282810360a084015260018060a01b038085511682528060208601511660208301525060408401516040820152606084015160608201526080840151608082015260a084015160a082015260c084015160e060c0830152614b0760e083018261452e565b9a9950505050505050505050565b600060808284031215614b2757600080fd5b614b2f613897565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060208284031215614b6b57600080fd5b81356001600160401b0380821115614b8257600080fd5b9083019060e08286031215614b9657600080fd5b614b9e613897565b823582811115614bad57600080fd5b830160c08188031215614bbf57600080fd5b614bc7613875565b81358152614bd7602083016137c1565b6020820152614be8604083016137c1565b6040820152606082013560608201526080820135608082015260a082013584811115614c1357600080fd5b614c1f8982850161392e565b60a08301525082525060208381013590820152614c3f8660408501614b15565b604082015260c083013582811115614c5657600080fd5b614c628782860161399d565b60608301525095945050505050565b60e080825285519082015260208501516001600160a01b039081166101008301526040860151166101208201526060850151610140820152608085015161016082015260a085015160c0610180830152600090614cd26101a084018261452e565b9050856020840152614d086040840186805182526020810151602083015260408101516040830152606081015160608301525050565b82810360c0840152613f03818561468f565b600060208284031215614d2c57600080fd5b81356001600160401b0380821115614d4357600080fd5b9083019060a08286031215614d5757600080fd5b614d5f6138b9565b614d688361376a565b815260208301356020820152604083013561ffff81168114614d8957600080fd5b6040820152606083013582811115614da057600080fd5b614dac8782860161392e565b606083015250608083013582811115614dc457600080fd5b614dd087828601614895565b60808301525095945050505050565b63ffffffff8616815284602082015261ffff8416604082015260a060608201526000614e0e60a083018561452e565b828103608084015261479e8185614a40565b602081526000611c5160208301848661413656fe6e5f7db1c3e1839c6d5eb59148d9042f8cdf3afe518b213142d5a68db640e90ca264697066735822122057b277f724e17151198b25441ac7ed8259d889d32c1a0094ad6e726cb9d47d3e64736f6c63430008110033", "deployedBytecode": "0x6080604052600436106103795760003560e01c80639c166c0b116101d1578063cf842be111610102578063dbd8848d116100a0578063e7dc20981161006f578063e7dc209814610aa9578063f0a67eba14610abf578063f3f91e8e14610adf578063fff01c4514610aff57600080fd5b8063dbd8848d14610a29578063dd39f00d14610a49578063de4b054814610a69578063e79457f114610a8957600080fd5b8063d6412ecb116100dc578063d6412ecb146109b3578063d9ef0bee146109c9578063db205635146109e9578063db40452214610a0957600080fd5b8063cf842be114610956578063d1851c9214610976578063d232c2201461099457600080fd5b8063b619d99f1161016f578063c415b95c11610149578063c415b95c146108e1578063c5b350df14610901578063caabc4c214610916578063ce9cec901461093657600080fd5b8063b619d99f14610868578063bfb4c78314610888578063c2fb26a6146108a857600080fd5b8063a42dce80116101ab578063a42dce80146107e8578063a91b8fb814610808578063b1f8100d14610828578063b4cef5461461084857600080fd5b80639c166c0b146107885780639cadce00146107a85780639f645a03146107c857600080fd5b8063622520bb116102ab57806389099717116102495780638e02f759116102235780638e02f759146107125780638efed12714610732578063931c0e78146107525780639a2652db1461076857600080fd5b806389099717146106b45780638c976851146106d45780638da5cb5b146106f457600080fd5b80636eba787f116102855780636eba787f14610649578063715018a614610669578063716907a71461067e57806382443e041461069457600080fd5b8063622520bb146105c5578063634c7bb5146106135780636a42b8f81461063357600080fd5b8063492a96f41161031857806351cff8d9116102f257806351cff8d91461054f578063529100391461056f5780635e21966a1461058557806360f0a5ac146105a557600080fd5b8063492a96f4146104ef5780634cc18e571461050f5780634d6f20131461052f57600080fd5b8063214444331161035457806321444433146104665780632d484bcc1461048a5780632f55b98d146104aa5780633cf52ffb146104da57600080fd5b806254a4fb146103bd57806315fa23bc146104045780631acde6281461041b57600080fd5b366103b857604080513481524760208201527f063d07ee72a7483b8e07ca09054bb686775c5c030f945dde3823a5257a0a93eb910160405180910390a1005b600080fd5b3480156103c957600080fd5b506103ed6103d8366004613748565b60126020526000908152604090205460ff1681565b60405160ff90911681526020015b60405180910390f35b34801561041057600080fd5b50610419610b1f565b005b34801561042757600080fd5b5061045661043636600461377e565b601360209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016103fb565b34801561047257600080fd5b5061047c60105481565b6040519081526020016103fb565b34801561049657600080fd5b506104196104a53660046137a8565b610b89565b3480156104b657600080fd5b506104566104c53660046137d8565b600d6020526000908152604090205460ff1681565b3480156104e657600080fd5b5060025461047c565b3480156104fb57600080fd5b5061047c61050a366004613a2c565b610bc0565b34801561051b57600080fd5b5061041961052a3660046137d8565b610c52565b34801561053b57600080fd5b5061041961054a3660046137d8565b610cb2565b34801561055b57600080fd5b5061041961056a3660046137d8565b610d0e565b34801561057b57600080fd5b5061047c60095481565b34801561059157600080fd5b506104196105a03660046137d8565b610e87565b3480156105b157600080fd5b506104196105c03660046137d8565b610ee3565b3480156105d157600080fd5b506105fb6105e0366004613ad2565b6014602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103fb565b34801561061f57600080fd5b506006546105fb906001600160a01b031681565b34801561063f57600080fd5b5062093a8061047c565b34801561065557600080fd5b506004546105fb906001600160a01b031681565b34801561067557600080fd5b50610419610f3f565b34801561068a57600080fd5b5061047c600b5481565b3480156106a057600080fd5b506104196106af366004613aed565b610ff3565b3480156106c057600080fd5b506104196106cf3660046137d8565b611028565b3480156106e057600080fd5b506104196106ef366004613b2a565b611084565b34801561070057600080fd5b506000546001600160a01b03166105fb565b34801561071e57600080fd5b5061041961072d366004613bbd565b6112a3565b34801561073e57600080fd5b5061047c61074d366004613be9565b61135a565b34801561075e57600080fd5b5061047c600c5481565b34801561077457600080fd5b50610419610783366004613c24565b611420565b34801561079457600080fd5b506011546105fb906001600160a01b031681565b3480156107b457600080fd5b506008546105fb906001600160a01b031681565b3480156107d457600080fd5b506104196107e33660046137d8565b6114e3565b3480156107f457600080fd5b506104196108033660046137d8565b61153f565b34801561081457600080fd5b50610419610823366004613cbf565b61159b565b34801561083457600080fd5b506104196108433660046137d8565b6115fd565b34801561085457600080fd5b506104196108633660046137a8565b61169b565b34801561087457600080fd5b50610419610883366004613cf2565b6116cf565b34801561089457600080fd5b506104196108a3366004613d98565b61194a565b3480156108b457600080fd5b506008546108cc90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016103fb565b3480156108ed57600080fd5b506005546105fb906001600160a01b031681565b34801561090d57600080fd5b50610419611998565b34801561092257600080fd5b50610419610931366004613e20565b611a08565b34801561094257600080fd5b50610456610951366004613e77565b611b00565b34801561096257600080fd5b50610419610971366004613f0e565b611c59565b34801561098257600080fd5b506001546001600160a01b03166105fb565b3480156109a057600080fd5b506000546001600160a01b031615610456565b3480156109bf57600080fd5b5061047c600a5481565b3480156109d557600080fd5b506104196109e4366004613f30565b611d08565b3480156109f557600080fd5b50600e546105fb906001600160a01b031681565b348015610a1557600080fd5b50610419610a243660046137a8565b611de1565b348015610a3557600080fd5b50610419610a44366004613d98565b611e15565b348015610a5557600080fd5b50610419610a643660046137d8565b611feb565b348015610a7557600080fd5b506007546105fb906001600160a01b031681565b348015610a9557600080fd5b50610419610aa4366004613f7d565b612047565b348015610ab557600080fd5b5061047c600f5481565b348015610acb57600080fd5b50610419610ada3660046137d8565b612104565b348015610aeb57600080fd5b50610419610afa366004613cf2565b612160565b348015610b0b57600080fd5b5061047c610b1a366004613a2c565b612259565b600e60009054906101000a90046001600160a01b03166001600160a01b03166315fa23bc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b6f57600080fd5b505af1158015610b83573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314610bb4576040516311a8a1bb60e31b815260040160405180910390fd5b610bbd81612481565b50565b336000908152600d602052604081205460ff16610bf057604051633cb4b93960e01b815260040160405180910390fd5b600f54601054610c00919061400a565b421015610c2057604051630962070b60e21b815260040160405180910390fd5b610c286124c3565b610c3788888888888888612521565b9050610c436001600355565b42601055979650505050505050565b6000546001600160a01b03163314610c7d576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610ca55760405163b04f8dcf60e01b815260040160405180910390fd5b610cae826125e8565b5050565b6000546001600160a01b03163314610cdd576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610d055760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82612651565b6000546001600160a01b03163314610d39576040516311a8a1bb60e31b815260040160405180910390fd5b610d416124c3565b60006001600160a01b03821615610dbf576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dba919061401d565b610dc1565b475b90506001600160a01b038216610de057610ddb33826126ba565b610e53565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e519190614044565b505b600080516020614e35833981519152828283604051610e7493929190614061565b60405180910390a150610bbd6001600355565b6000546001600160a01b03163314610eb2576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610eda5760405163b04f8dcf60e01b815260040160405180910390fd5b610cae826127d3565b6000546001600160a01b03163314610f0e576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b038116610f365760405163b04f8dcf60e01b815260040160405180910390fd5b610cae8261283c565b6000546001600160a01b03163314610f6a576040516311a8a1bb60e31b815260040160405180910390fd5b62093a8060025442610f7c9190614082565b11610f9a576040516324e0285f60e21b815260040160405180910390fd5b600254600003610fbd57604051630e4b303f60e21b815260040160405180910390fd5b6001546001600160a01b031615610fe7576040516323295ef960e01b815260040160405180910390fd5b610ff160006128cd565b565b6000546001600160a01b0316331461101e576040516311a8a1bb60e31b815260040160405180910390fd5b610cae8282612932565b6000546001600160a01b03163314611053576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661107b5760405163b04f8dcf60e01b815260040160405180910390fd5b610cae826129fa565b60115460009033906001600160a01b031681148015906110dd5750601260008360038111156110b5576110b5614095565b60038111156110c6576110c6614095565b815260208101919091526040016000205460ff1615155b801561113c57506001601260008460038111156110fc576110fc614095565b600381111561110d5761110d614095565b815260208101919091526040016000205461112b919060ff166140ab565b60ff16611139600a436140c4565b11155b1561115a5760405163114c214760e01b815260040160405180910390fd5b6006546040516335d2155560e11b81523360048201819052916001600160a01b031690636ba42aaa906024016020604051808303816000875af11580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c99190614044565b6111e6576040516334985ed360e01b815260040160405180910390fd5b600f546010546111f6919061400a565b42101561121657604051630962070b60e21b815260040160405180910390fd5b61121e6124c3565b61122b8888888888612a63565b506112366001600355565b426010556006546040516317fbade560e21b81526001600160a01b03838116600483015290911690635feeb79490602401600060405180830381600087803b15801561128157600080fd5b505af1158015611295573d6000803e3d6000fd5b505050505050505050505050565b600b54600c546112b3919061400a565b4210156112d357604051630c0e333560e11b815260040160405180910390fd5b6112db6124c3565b600854604051638e02f75960e01b81526004810185905260248101849052604481018390526001600160a01b0390911690638e02f75990606401600060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b505050506113516001600355565b505042600c5550565b336000908152600d602052604081205460ff1661138a57604051633cb4b93960e01b815260040160405180910390fd5b6113926124c3565b6007546040516331f1f3e960e11b81526001600160a01b03909116906363e3e7d2906113c290869060040161424b565b6020604051808303816000875af11580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611405919061401d565b905061141082612b24565b61141a6001600355565b92915050565b336000908152600d602052604090205460ff1661145057604051633cb4b93960e01b815260040160405180910390fd5b600f54601054611460919061400a565b42101561148057604051630962070b60e21b815260040160405180910390fd5b6114886124c3565b60006114978787878787612a63565b9050600080516020614e35833981519152600082476040516114bb93929190614061565b60405180910390a16114cc82612b24565b506114d76001600355565b50504260105550505050565b6000546001600160a01b0316331461150e576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166115365760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82612b88565b6000546001600160a01b0316331461156a576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166115925760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82612bf1565b6000546001600160a01b031633146115c6576040516311a8a1bb60e31b815260040160405180910390fd5b816001600160a01b0381166115ee5760405163b04f8dcf60e01b815260040160405180910390fd5b6115f88383612c5a565b505050565b6000546001600160a01b03163314611628576040516311a8a1bb60e31b815260040160405180910390fd5b6001546001600160a01b038281169116148015611646575060025415155b15611664576040516311bc066560e11b815260040160405180910390fd5b6000546001600160a01b0380831691160361169257604051634a2fb73f60e11b815260040160405180910390fd5b610bbd81612cf3565b6000546001600160a01b031633146116c6576040516311a8a1bb60e31b815260040160405180910390fd5b610bbd81612d41565b60115460029033906001600160a01b0316811480159061172857506012600083600381111561170057611700614095565b600381111561171157611711614095565b815260208101919091526040016000205460ff1615155b8015611787575060016012600084600381111561174757611747614095565b600381111561175857611758614095565b8152602081019190915260400160002054611776919060ff166140ab565b60ff16611784600a436140c4565b11155b156117a55760405163114c214760e01b815260040160405180910390fd5b6006546040516335d2155560e11b81523360048201819052916001600160a01b031690636ba42aaa906024016020604051808303816000875af11580156117f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118149190614044565b611831576040516334985ed360e01b815260040160405180910390fd5b600954600a54611841919061400a565b4210156118615760405163923904d960e01b815260040160405180910390fd5b61186f8a8a600a5487612d83565b600e54604051630892003960e01b81526001600160a01b03909116906308920039906118a9908d908d908d908d908d908d90600401614470565b600060405180830381600087803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b505042600a5550506006546040516317fbade560e21b81526001600160a01b03838116600483015290911690635feeb79490602401600060405180830381600087803b15801561192657600080fd5b505af115801561193a573d6000803e3d6000fd5b5050505050505050505050505050565b336000908152600d602052604090205460ff1661197a57604051633cb4b93960e01b815260040160405180910390fd5b6119826124c3565b61198e84848484612e83565b610b836001600355565b6001546001600160a01b031633146119c3576040516311a7f27160e11b815260040160405180910390fd5b62093a80600254426119d59190614082565b116119f3576040516324e0285f60e21b815260040160405180910390fd5b600154610ff1906001600160a01b03166128cd565b336000908152600d602052604090205460ff16611a3857604051633cb4b93960e01b815260040160405180910390fd5b600954600a54611a48919061400a565b421015611a685760405163923904d960e01b815260040160405180910390fd5b611a706124c3565b611a7e8484600a5485613237565b60085460405163111c183760e01b815260048101869052602481018590526001600160a01b039091169063111c183790604401600060405180830381600087803b158015611acb57600080fd5b505af1158015611adf573d6000803e3d6000fd5b50505050611aec81612b24565b611af66001600355565b505042600a555050565b600e546040805163957908d160e01b8152815160009384936001600160a01b039091169263957908d19260048083019392829003018187875af1158015611b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6f91906144db565b5090506000805b8451811015611c3457600e54855184916001600160a01b03169063f715589a90889085908110611ba857611ba86144ff565b60200260200101516040518263ffffffff1660e01b8152600401611bd8919063ffffffff91909116815260200190565b602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c19919061401d565b1415915081611c345780611c2c81614515565b915050611b76565b50808015611c515750600f54601054611c4d919061400a565b4210155b949350505050565b600b54600c54611c69919061400a565b421015611c8957604051630c0e333560e11b815260040160405180910390fd5b611c916124c3565b600e5460405163e9812d7160e01b815260048101849052602481018390526001600160a01b039091169063e9812d7190604401600060405180830381600087803b158015611cde57600080fd5b505af1158015611cf2573d6000803e3d6000fd5b50505050611d006001600355565b505042600c55565b336000908152600d602052604090205460ff16611d3857604051633cb4b93960e01b815260040160405180910390fd5b611d406124c3565b600854604051630aec6b9f60e21b81526001600160a01b0390911690632bb1ae7c908490611d72908790600401614574565b6000604051808303818588803b158015611d8b57600080fd5b505af1158015611d9f573d6000803e3d6000fd5b5050505050600080516020614e3583398151915260008347604051611dc693929190614061565b60405180910390a1611dd781612b24565b6115f86001600355565b6000546001600160a01b03163314611e0c576040516311a8a1bb60e31b815260040160405180910390fd5b610bbd81613331565b60115460019033906001600160a01b03168114801590611e6e575060126000836003811115611e4657611e46614095565b6003811115611e5757611e57614095565b815260208101919091526040016000205460ff1615155b8015611ecd5750600160126000846003811115611e8d57611e8d614095565b6003811115611e9e57611e9e614095565b8152602081019190915260400160002054611ebc919060ff166140ab565b60ff16611eca600a436140c4565b11155b15611eeb5760405163114c214760e01b815260040160405180910390fd5b6006546040516335d2155560e11b81523360048201819052916001600160a01b031690636ba42aaa906024016020604051808303816000875af1158015611f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5a9190614044565b611f77576040516334985ed360e01b815260040160405180910390fd5b611f8387878787612e83565b6006546040516317fbade560e21b81526001600160a01b03838116600483015290911690635feeb79490602401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b03163314612016576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b03811661203e5760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82613373565b336000908152600d602052604090205460ff1661207757604051633cb4b93960e01b815260040160405180910390fd5b61207f6124c3565b60085460405163508a109b60e01b81526001600160a01b039091169063508a109b906120b79089908990899089908990600401614591565b600060405180830381600087803b1580156120d157600080fd5b505af11580156120e5573d6000803e3d6000fd5b505050506120f281612b24565b6120fc6001600355565b505050505050565b6000546001600160a01b0316331461212f576040516311a8a1bb60e31b815260040160405180910390fd5b806001600160a01b0381166121575760405163b04f8dcf60e01b815260040160405180910390fd5b610cae82613401565b336000908152600d602052604090205460ff1661219057604051633cb4b93960e01b815260040160405180910390fd5b600954600a546121a0919061400a565b4210156121c05760405163923904d960e01b815260040160405180910390fd5b6121c86124c3565b6121d68787600a5484612d83565b600e54604051630892003960e01b81526001600160a01b0390911690630892003990612210908a908a908a908a908a908a90600401614470565b600060405180830381600087803b15801561222a57600080fd5b505af115801561223e573d6000803e3d6000fd5b5050505061224c6001600355565b505042600a555050505050565b601154600090819033906001600160a01b031681148015906122b457506012600083600381111561228c5761228c614095565b600381111561229d5761229d614095565b815260208101919091526040016000205460ff1615155b801561231357506001601260008460038111156122d3576122d3614095565b60038111156122e4576122e4614095565b8152602081019190915260400160002054612302919060ff166140ab565b60ff16612310600a436140c4565b11155b156123315760405163114c214760e01b815260040160405180910390fd5b6006546040516335d2155560e11b81523360048201819052916001600160a01b031690636ba42aaa906024016020604051808303816000875af115801561237c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a09190614044565b6123bd576040516334985ed360e01b815260040160405180910390fd5b600f546010546123cd919061400a565b4210156123ed57604051630962070b60e21b815260040160405180910390fd5b6123f56124c3565b6124048b8b8b8b8b8b8b612521565b93506124106001600355565b426010556006546040516317fbade560e21b81526001600160a01b03838116600483015290911690635feeb79490602401600060405180830381600087803b15801561245b57600080fd5b505af115801561246f573d6000803e3d6000fd5b50505050505050979650505050505050565b600f546040805183815260208101929092527f5d93bbdda0d794fed18c39a7b776dc86cbf6ed443032e6baac71373996b85010910160405180910390a1600f55565b60026003540361251a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600355565b60008087815b818163ffffffff1610156125695788888263ffffffff1681811061254d5761254d6144ff565b905060200201358361255f919061400a565b9250600101612527565b50600e5460405163124aa5bd60e21b81526001600160a01b039091169063492a96f49084906125a8908e908e908e908e908e908e908e906004016146d7565b6000604051808303818588803b1580156125c157600080fd5b505af11580156125d5573d6000803e3d6000fd5b50949d9c50505050505050505050505050565b600654604080516001600160a01b03808516825290921660208301527f711d2a81db157c0acede64f080708460163dfaddcd4266c2c609efb458d3e4c0910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b600754604080516001600160a01b03808516825290921660208301527f87539ad41983c0ecff8f321db8edf4dd9e830593562770bdacdda085b83e3bb2910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b8047101561270a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401612511565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612757576040519150601f19603f3d011682016040523d82523d6000602084013e61275c565b606091505b50509050806115f85760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401612511565b600454604080516001600160a01b03808516825290921660208301527f5db4a067a1f787c3269642464a2a1560868b50b0873e7dec83939ae2359f6128910160405180910390a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600d602052604090205460ff166128755760405163092a8e7160e41b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916905590519182527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b91015b60405180910390a150565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316178155600255600180549091169055565b7f2cf410431a72dc4bf0cc68af378641831e086686f41d275c16b60799824af83b82826012600086600381111561296b5761296b614095565b600381111561297c5761297c614095565b8152602081019190915260409081016000205490516129a093929160ff1690614729565b60405180910390a180601260008460038111156129bf576129bf614095565b60038111156129d0576129d0614095565b815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b601154604080516001600160a01b03808516825290921660208301527f17da78d98886c3b8819430ab0693a44c32dfa6426a4db4601ce45bc4bc2385ec910160405180910390a1601180546001600160a01b0319166001600160a01b0392909216919091179055565b60008085815b818163ffffffff161015612aab5786868263ffffffff16818110612a8f57612a8f6144ff565b9050602002013583612aa1919061400a565b9250600101612a69565b50600e5460405163412e12db60e01b81526001600160a01b039091169063412e12db908490612ae6908c908c908c908c908c90600401614763565b6000604051808303818588803b158015612aff57600080fd5b505af1158015612b13573d6000803e3d6000fd5b50949b9a5050505050505050505050565b80600003612b2f5750565b6004546001600160a01b03163303612b5c57600554612b57906001600160a01b0316826126ba565b612b66565b612b6633826126ba565b600080516020614e35833981519152600082476040516128c293929190614061565b600854604080516001600160a01b03808516825290921660208301527f66948d99d8431a8416af2202bc301823b7cdd87beb9bddaa274aedac0611a5fd910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b600554604080516001600160a01b03808516825290921660208301527f649c5e3d0ed183894196148e193af316452b0037e77d2ff0fef23b7dc722bed0910160405180910390a1600580546001600160a01b0319166001600160a01b0392909216919091179055565b63ffffffff81166000818152601460209081526040918290205482516001600160a01b0387811682529091169181019190915280820192909252517ff3f83f3e1df056d9be522e74b3fe84add98c686289a646ae55708277434240929181900360600190a163ffffffff16600090815260146020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b42600255600180546001600160a01b0319166001600160a01b0383169081179091556040517f6ab4d119f23076e8ad491bc65ce85f017fb0591dce08755ba8591059cc51737a90600090a250565b600b546040805183815260208101929092527f2a1ca87adff1a64c5b6edc218dfd6b80208260b240fbc939ea43e07c2764f5ca910160405180910390a1600b55565b600854604080516020810187905290810185905260608101849052600160a01b90910460e01b6001600160e01b03191660808201526000906084016040516020818303038152906040528051906020012090506000612deb83612de58461346a565b906134bd565b600e54604051632516d8ed60e11b81526001600160a01b038084166004830152929350911690634a2db1da90602401602060405180830381865afa158015612e37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5b9190614044565b6120fc5760405163af1cef3f60e01b81526001600160a01b0382166004820152602401612511565b63ffffffff8216600090815260136020908152604080832084845290915290205460ff1615612ec5576040516320a413f360e01b815260040160405180910390fd5b63ffffffff82166000908152601460205260409020546001600160a01b0316612f0157604051636617d23960e01b815260040160405180910390fd5b63ffffffff821660008181526013602090815260408083208584529091529020805460ff1916600117905560641480612f41575063ffffffff82166127d8145b15612fd8576000612f54848601866147aa565b63ffffffff8416600090815260146020908152604091829020548351918401519251633f7658fd60e01b81529394506001600160a01b031692633f7658fd92612fa09291600401614850565b600060405180830381600087803b158015612fba57600080fd5b505af1158015612fce573d6000803e3d6000fd5b5050505050610b83565b63ffffffff821661a4b11480612ff6575063ffffffff821662066eed145b1561306b57600061300984860186614981565b63ffffffff841660009081526014602090815260409182902054835191840151838501516060860151608087015160a08801519651632750dce960e21b81529798506001600160a01b0390941696639d4373a496612fa0969591600401614a70565b63ffffffff8216600a1480613087575063ffffffff82166101a4145b156130f257600061309a84860186614b59565b63ffffffff8416600090815260146020908152604091829020548351918401518385015160608601519451637049138f60e01b81529596506001600160a01b0390921694637049138f94612fa0949391600401614c71565b63ffffffff8216610144148061310f575063ffffffff8216610118145b1561317f57600061312284860186614d1a565b63ffffffff8416600090815260146020908152604091829020548351918401518385015160608601516080870151955163e92a492f60e01b81529697506001600160a01b039093169563e92a492f95612fa0959491600401614ddf565b63ffffffff82166089148061319c575063ffffffff821662013881145b1561321e5763ffffffff82166000908152601460205260409081902054905163f953cec760e01b81526001600160a01b039091169063f953cec7906131e79087908790600401614e20565b600060405180830381600087803b15801561320157600080fd5b505af1158015613215573d6000803e3d6000fd5b50505050610b83565b60405163d3f4d63b60e01b815260040160405180910390fd5b600854604080516020810187905290810185905260608101849052600160a01b90910460e01b6001600160e01b0319166080820152600090608401604051602081830303815290604052805190602001209050600061329983612de58461346a565b600854604051632516d8ed60e11b81526001600160a01b038084166004830152929350911690634a2db1da90602401602060405180830381865afa1580156132e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133099190614044565b6120fc57604051634810638b60e01b81526001600160a01b0382166004820152602401612511565b6009546040805183815260208101929092527f289d6927dc5ba66abb928c5be9d3aecd2baf7c8e89f1faec6a791b8b21589a5d910160405180910390a1600955565b6001600160a01b0381166000908152600d602052604090205460ff16156133ad57604051639e9dd41d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff1916600117905590519182527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c591016128c2565b600e54604080516001600160a01b03808516825290921660208301527f3124eaf4f16c6ddd81951200c6d8f65d5800753bef06584bd672c8b22c76b487910160405180910390a1600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b60008060006134cc85856134e1565b915091506134d981613526565b509392505050565b60008082516041036135175760208301516040840151606085015160001a61350b87828585613670565b9450945050505061351f565b506000905060025b9250929050565b600081600481111561353a5761353a614095565b036135425750565b600181600481111561355657613556614095565b036135a35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401612511565b60028160048111156135b7576135b7614095565b036136045760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401612511565b600381600481111561361857613618614095565b03610bbd5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401612511565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156136a7575060009050600361372b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156136fb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166137245760006001925092505061372b565b9150600090505b94509492505050565b80356004811061374357600080fd5b919050565b60006020828403121561375a57600080fd5b61376382613734565b9392505050565b803563ffffffff8116811461374357600080fd5b6000806040838503121561379157600080fd5b61379a8361376a565b946020939093013593505050565b6000602082840312156137ba57600080fd5b5035919050565b80356001600160a01b038116811461374357600080fd5b6000602082840312156137ea57600080fd5b613763826137c1565b60008083601f84011261380557600080fd5b5081356001600160401b0381111561381c57600080fd5b6020830191508360208260051b850101111561351f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561386f5761386f613837565b60405290565b60405160c081016001600160401b038111828210171561386f5761386f613837565b604051608081016001600160401b038111828210171561386f5761386f613837565b60405160a081016001600160401b038111828210171561386f5761386f613837565b604051601f8201601f191681016001600160401b038111828210171561390357613903613837565b604052919050565b60006001600160401b0382111561392457613924613837565b5060051b60200190565b600082601f83011261393f57600080fd5b81356001600160401b0381111561395857613958613837565b61396b601f8201601f19166020016138db565b81815284602083860101111561398057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126139ae57600080fd5b813560206139c36139be8361390b565b6138db565b82815260059290921b840181019181810190868411156139e257600080fd5b8286015b84811015613a215780356001600160401b03811115613a055760008081fd5b613a138986838b010161392e565b8452509183019183016139e6565b509695505050505050565b600080600080600080600060a0888a031215613a4757600080fd5b87356001600160401b0380821115613a5e57600080fd5b613a6a8b838c016137f3565b909950975060208a0135915080821115613a8357600080fd5b613a8f8b838c016137f3565b909750955060408a0135915080821115613aa857600080fd5b50613ab58a828b0161399d565b935050606088013591506080880135905092959891949750929550565b600060208284031215613ae457600080fd5b6137638261376a565b60008060408385031215613b0057600080fd5b613b0983613734565b9150602083013560ff81168114613b1f57600080fd5b809150509250929050565b600080600080600060608688031215613b4257600080fd5b85356001600160401b0380821115613b5957600080fd5b613b6589838a016137f3565b90975095506020880135915080821115613b7e57600080fd5b613b8a89838a016137f3565b90955093506040880135915080821115613ba357600080fd5b50613bb08882890161399d565b9150509295509295909350565b600080600060608486031215613bd257600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613bfc57600080fd5b82356001600160401b03811115613c1257600080fd5b830160a0818603121561379a57600080fd5b60008060008060008060808789031215613c3d57600080fd5b86356001600160401b0380821115613c5457600080fd5b613c608a838b016137f3565b90985096506020890135915080821115613c7957600080fd5b613c858a838b016137f3565b90965094506040890135915080821115613c9e57600080fd5b50613cab89828a0161399d565b925050606087013590509295509295509295565b60008060408385031215613cd257600080fd5b613cdb836137c1565b9150613ce96020840161376a565b90509250929050565b600080600080600080600060a0888a031215613d0d57600080fd5b873596506020880135955060408801356001600160401b0380821115613d3257600080fd5b613d3e8b838c016137f3565b909750955060608a0135915080821115613d5757600080fd5b613d638b838c016137f3565b909550935060808a0135915080821115613d7c57600080fd5b50613d898a828b0161392e565b91505092959891949750929550565b60008060008060608587031215613dae57600080fd5b84356001600160401b0380821115613dc557600080fd5b818701915087601f830112613dd957600080fd5b813581811115613de857600080fd5b886020828501011115613dfa57600080fd5b602092830196509450613e10918701905061376a565b9396929550929360400135925050565b60008060008060808587031215613e3657600080fd5b843593506020850135925060408501356001600160401b03811115613e5a57600080fd5b613e668782880161392e565b949793965093946060013593505050565b60006020808385031215613e8a57600080fd5b82356001600160401b03811115613ea057600080fd5b8301601f81018513613eb157600080fd5b8035613ebf6139be8261390b565b81815260059190911b82018301908381019087831115613ede57600080fd5b928401925b82841015613f0357613ef48461376a565b82529284019290840190613ee3565b979650505050505050565b60008060408385031215613f2157600080fd5b50508035926020909101359150565b600080600060608486031215613f4557600080fd5b83356001600160401b03811115613f5b57600080fd5b613f678682870161392e565b9660208601359650604090950135949350505050565b6000806000806000806104808789031215613f9757600080fd5b86356001600160401b03811115613fad57600080fd5b613fb989828a016137f3565b90975095505060208701359350610440870188811115613fd857600080fd5b9598949750929560408101953594610460909101359350915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561141a5761141a613ff4565b60006020828403121561402f57600080fd5b5051919050565b8015158114610bbd57600080fd5b60006020828403121561405657600080fd5b815161376381614036565b6001600160a01b039390931683526020830191909152604082015260600190565b8181038181111561141a5761141a613ff4565b634e487b7160e01b600052602160045260246000fd5b60ff828116828216039081111561141a5761141a613ff4565b6000826140e157634e487b7160e01b600052601260045260246000fd5b500690565b803561374381614036565b6000808335601e1984360301811261410857600080fd5b83016020810192503590506001600160401b0381111561412757600080fd5b80360382131561351f57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261417657600080fd5b83016020810192503590506001600160401b0381111561419557600080fd5b8060051b360382131561351f57600080fd5b8183526000602080850194508260005b858110156141e3576001600160a01b036141d0836137c1565b16875295820195908201906001016141b7565b509495945050505050565b81835260006020808501808196508560051b810191508460005b8781101561423e57828403895261421f82886140f1565b61422a868284614136565b9a87019a9550505090840190600101614208565b5091979650505050505050565b602081526000823561019e1984360301811261426657600080fd5b60a06020840152830161428960c0840161427f8361376a565b63ffffffff169052565b6142956020820161376a565b63ffffffff1660e08401526142ac6040820161376a565b6101006142c08186018363ffffffff169052565b6142cc606084016137c1565b91506101206142e5818701846001600160a01b03169052565b6142f1608085016137c1565b925061014061430a818801856001600160a01b03169052565b61431660a086016140e6565b93506101606143288189018615159052565b61433560c08701876140f1565b95506101a061018081818c01526143516102608c018985614136565b975060e0890135828c0152614367878a016137c1565b6001600160a01b03166101c08c0152948801356101e08b0152505090850135610200880152840135610220870152830135610240860152506143ac602086018661415f565b9250601f19808684030160408701526143c68385846141a7565b93506143d5604088018861415f565b93509150808685030160608701526143ee8484846141ee565b93506143fc606088016137c1565b6001600160a01b0381166080880152925061441a60808801886140f1565b93509150808685030160a087015250614434838383614136565b9695505050505050565b81835260006001600160fb1b0383111561445757600080fd5b8260051b80836020870137939093016020019392505050565b8681526000602087818401526080604084015261449160808401878961443e565b83810360608501528481528590820160005b868110156144cc5763ffffffff6144b98461376a565b16825291830191908301906001016144a3565b509a9950505050505050505050565b600080604083850312156144ee57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052603260045260246000fd5b60006001820161452757614527613ff4565b5060010190565b6000815180845260005b8181101561455457602081850181015186830182015201614538565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000613763602083018461452e565b6104008183375050565b6104608082528101859052600061048080830190600588901b8401018883805b8a8110156146275786840361047f190185528235368d900361043e190181126145d8578283fd5b8c016104406145e782806140f1565b8288526145f78389018284614136565b925050506020610400818401828901376104209283013596909201959095529485019492909201916001016145b1565b50505080925050508460208301526146426040830185614587565b826104408301529695505050505050565b8183526000602080850194508260005b858110156141e3576001600160a01b0361467c836137c1565b1687529582019590820190600101614663565b600081518084526020808501808196508360051b8101915082860160005b8581101561423e5782840389526146c584835161452e565b988501989350908401906001016146ad565b60a0815260006146eb60a08301898b614653565b82810360208401526146fe81888a61443e565b90508281036040840152614712818761468f565b606084019590955250506080015295945050505050565b606081016004851061474b57634e487b7160e01b600052602160045260246000fd5b93815260ff9283166020820152911660409091015290565b606081526000614777606083018789614653565b828103602084015261478a81868861443e565b9050828103604084015261479e818561468f565b98975050505050505050565b6000602082840312156147bc57600080fd5b81356001600160401b03808211156147d357600080fd5b90830190604082860312156147e757600080fd5b60405160408101818110838211171561480257614802613837565b60405282358281111561481457600080fd5b6148208782860161392e565b82525060208301358281111561483557600080fd5b6148418782860161392e565b60208301525095945050505050565b604081526000614863604083018561452e565b8281036020840152614875818561452e565b95945050505050565b80356001600160401b038116811461374357600080fd5b600082601f8301126148a657600080fd5b813560206148b66139be8361390b565b82815260059290921b840181019181810190868411156148d557600080fd5b8286015b84811015613a2157803583529183019183016148d9565b600060e0828403121561490257600080fd5b61490a61384d565b9050614915826137c1565b8152614923602083016137c1565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c08201356001600160401b0381111561496957600080fd5b6149758482850161392e565b60c08301525092915050565b60006020828403121561499357600080fd5b81356001600160401b03808211156149aa57600080fd5b9083019060c082860312156149be57600080fd5b6149c6613875565b6149cf8361487e565b815260208301356020820152604083013560408201526060830135828111156149f757600080fd5b614a0387828601614895565b6060830152506080830135608082015260a083013582811115614a2557600080fd5b614a31878286016148f0565b60a08301525095945050505050565b600081518084526020808501945080840160005b838110156141e357815187529582019590820190600101614a54565b6001600160401b038716815285602082015284604082015260c060608201526000614a9e60c0830186614a40565b84608084015282810360a084015260018060a01b038085511682528060208601511660208301525060408401516040820152606084015160608201526080840151608082015260a084015160a082015260c084015160e060c0830152614b0760e083018261452e565b9a9950505050505050505050565b600060808284031215614b2757600080fd5b614b2f613897565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b600060208284031215614b6b57600080fd5b81356001600160401b0380821115614b8257600080fd5b9083019060e08286031215614b9657600080fd5b614b9e613897565b823582811115614bad57600080fd5b830160c08188031215614bbf57600080fd5b614bc7613875565b81358152614bd7602083016137c1565b6020820152614be8604083016137c1565b6040820152606082013560608201526080820135608082015260a082013584811115614c1357600080fd5b614c1f8982850161392e565b60a08301525082525060208381013590820152614c3f8660408501614b15565b604082015260c083013582811115614c5657600080fd5b614c628782860161399d565b60608301525095945050505050565b60e080825285519082015260208501516001600160a01b039081166101008301526040860151166101208201526060850151610140820152608085015161016082015260a085015160c0610180830152600090614cd26101a084018261452e565b9050856020840152614d086040840186805182526020810151602083015260408101516040830152606081015160608301525050565b82810360c0840152613f03818561468f565b600060208284031215614d2c57600080fd5b81356001600160401b0380821115614d4357600080fd5b9083019060a08286031215614d5757600080fd5b614d5f6138b9565b614d688361376a565b815260208301356020820152604083013561ffff81168114614d8957600080fd5b6040820152606083013582811115614da057600080fd5b614dac8782860161392e565b606083015250608083013582811115614dc457600080fd5b614dd087828601614895565b60808301525095945050505050565b63ffffffff8616815284602082015261ffff8416604082015260a060608201526000614e0e60a083018561452e565b828103608084015261479e8185614a40565b602081526000611c5160208301848661413656fe6e5f7db1c3e1839c6d5eb59148d9042f8cdf3afe518b213142d5a68db640e90ca264697066735822122057b277f724e17151198b25441ac7ed8259d889d32c1a0094ad6e726cb9d47d3e64736f6c63430008110033", @@ -2455,7 +2497,7 @@ "storageLayout": { "storage": [ { - "astId": 48861, + "astId": 29053, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "_owner", "offset": 0, @@ -2463,7 +2505,7 @@ "type": "t_address" }, { - "astId": 48863, + "astId": 29055, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "_proposed", "offset": 0, @@ -2471,7 +2513,7 @@ "type": "t_address" }, { - "astId": 48865, + "astId": 29057, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "_proposedOwnershipTimestamp", "offset": 0, @@ -2479,7 +2521,7 @@ "type": "t_uint256" }, { - "astId": 2839, + "astId": 1732, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "_status", "offset": 0, @@ -2487,7 +2529,7 @@ "type": "t_uint256" }, { - "astId": 16601, + "astId": 4681, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "gelatoRelayer", "offset": 0, @@ -2495,7 +2537,7 @@ "type": "t_address" }, { - "astId": 16603, + "astId": 4683, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "feeCollector", "offset": 0, @@ -2503,31 +2545,31 @@ "type": "t_address" }, { - "astId": 16606, + "astId": 4686, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "keep3r", "offset": 0, "slot": "6", - "type": "t_contract(IKeep3rV2)16589" + "type": "t_contract(IKeep3rV2)4669" }, { - "astId": 16609, + "astId": 4689, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "connext", "offset": 0, "slot": "7", - "type": "t_contract(IConnext)20944" + "type": "t_contract(IConnext)8001" }, { - "astId": 16612, + "astId": 4692, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "spokeConnector", "offset": 0, "slot": "8", - "type": "t_contract(ISpokeConnector)16576" + "type": "t_contract(ISpokeConnector)4656" }, { - "astId": 16614, + "astId": 4694, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "domain", "offset": 20, @@ -2535,7 +2577,7 @@ "type": "t_uint32" }, { - "astId": 16617, + "astId": 4697, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "proposeAggregateRootCooldown", "offset": 0, @@ -2543,7 +2585,7 @@ "type": "t_uint256" }, { - "astId": 16620, + "astId": 4700, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "lastProposeAggregateRootAt", "offset": 0, @@ -2551,7 +2593,7 @@ "type": "t_uint256" }, { - "astId": 16623, + "astId": 4703, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "finalizeCooldown", "offset": 0, @@ -2559,7 +2601,7 @@ "type": "t_uint256" }, { - "astId": 16626, + "astId": 4706, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "lastFinalizeAt", "offset": 0, @@ -2567,7 +2609,7 @@ "type": "t_uint256" }, { - "astId": 16630, + "astId": 4710, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "allowedRelayer", "offset": 0, @@ -2575,15 +2617,15 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 17783, + "astId": 5863, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "rootManager", "offset": 0, "slot": "14", - "type": "t_contract(IRootManager)17651" + "type": "t_contract(IRootManager)5731" }, { - "astId": 17786, + "astId": 5866, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "propagateCooldown", "offset": 0, @@ -2591,7 +2633,7 @@ "type": "t_uint256" }, { - "astId": 17789, + "astId": 5869, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "lastPropagateAt", "offset": 0, @@ -2599,7 +2641,7 @@ "type": "t_uint256" }, { - "astId": 17792, + "astId": 5872, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "autonolas", "offset": 0, @@ -2607,15 +2649,15 @@ "type": "t_address" }, { - "astId": 17803, + "astId": 5883, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "autonolasPriority", "offset": 0, "slot": "18", - "type": "t_mapping(t_enum(AutonolasPriorityFunction)17797,t_uint8)" + "type": "t_mapping(t_enum(AutonolasPriorityFunction)5877,t_uint8)" }, { - "astId": 17810, + "astId": 5890, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "processedRootMessages", "offset": 0, @@ -2623,7 +2665,7 @@ "type": "t_mapping(t_uint32,t_mapping(t_bytes32,t_bool))" }, { - "astId": 17815, + "astId": 5895, "contract": "contracts/core/connext/helpers/RelayerProxyHub.sol:RelayerProxyHub", "label": "hubConnectors", "offset": 0, @@ -2647,27 +2689,27 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_contract(IConnext)20944": { + "t_contract(IConnext)8001": { "encoding": "inplace", "label": "contract IConnext", "numberOfBytes": "20" }, - "t_contract(IKeep3rV2)16589": { + "t_contract(IKeep3rV2)4669": { "encoding": "inplace", "label": "contract IKeep3rV2", "numberOfBytes": "20" }, - "t_contract(IRootManager)17651": { + "t_contract(IRootManager)5731": { "encoding": "inplace", "label": "contract IRootManager", "numberOfBytes": "20" }, - "t_contract(ISpokeConnector)16576": { + "t_contract(ISpokeConnector)4656": { "encoding": "inplace", "label": "contract ISpokeConnector", "numberOfBytes": "20" }, - "t_enum(AutonolasPriorityFunction)17797": { + "t_enum(AutonolasPriorityFunction)5877": { "encoding": "inplace", "label": "enum RelayerProxyHub.AutonolasPriorityFunction", "numberOfBytes": "1" @@ -2686,9 +2728,9 @@ "numberOfBytes": "32", "value": "t_bool" }, - "t_mapping(t_enum(AutonolasPriorityFunction)17797,t_uint8)": { + "t_mapping(t_enum(AutonolasPriorityFunction)5877,t_uint8)": { "encoding": "mapping", - "key": "t_enum(AutonolasPriorityFunction)17797", + "key": "t_enum(AutonolasPriorityFunction)5877", "label": "mapping(enum RelayerProxyHub.AutonolasPriorityFunction => uint8)", "numberOfBytes": "32", "value": "t_uint8" diff --git a/packages/deployments/contracts/devnet.deployments.json b/packages/deployments/contracts/devnet.deployments.json index 61b0d6c531..9e26dfeeb6 100644 --- a/packages/deployments/contracts/devnet.deployments.json +++ b/packages/deployments/contracts/devnet.deployments.json @@ -1,270188 +1 @@ -{ - "1": [ - { - "name": "1_production_fork", - "chainId": "1", - "contracts": { - "ArbitrumHubConnector": { - "address": "0x83096c7455f24E593aaC9A7c73f849d36d3EEb82", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_outbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_maxSubmissionCostCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxGasCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_gasPriceCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "NotCrossChainCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasPriceCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "MaxGasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "MaxSubmissionCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "ticketId", - "type": "uint256" - } - ], - "name": "RetryableTicketCreated", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPriceCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxGasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxSubmissionCostCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outbox", - "outputs": [ - { - "internalType": "contract IArbitrumOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_nodeNum", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_sendRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_proof", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "l2Sender", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "l2Block", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l1Block", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct L2Message", - "name": "_message", - "type": "tuple" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rollup", - "outputs": [ - { - "internalType": "contract IArbitrumRollup", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setGasPriceCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setMaxGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setMaxSubmissionCostCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18737820 - }, - "ArbitrumHubConnectorStaging": { - "address": "0x7D8d16c500b89E4A1fdE991F284d84d57E949aE3", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_outbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_maxSubmissionCostCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxGasCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_gasPriceCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "NotCrossChainCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasPriceCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "MaxGasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "MaxSubmissionCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "ticketId", - "type": "uint256" - } - ], - "name": "RetryableTicketCreated", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPriceCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxGasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxSubmissionCostCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outbox", - "outputs": [ - { - "internalType": "contract IArbitrumOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_nodeNum", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_sendRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_proof", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "l2Sender", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "l2Block", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l1Block", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct L2Message", - "name": "_message", - "type": "tuple" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rollup", - "outputs": [ - { - "internalType": "contract IArbitrumRollup", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setGasPriceCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setMaxGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setMaxSubmissionCostCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982736 - }, - "AvalancheHubConnector": { - "address": "0xf5a3372ed529FCD0690b6013EAaE04170ec0626b", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_mirrorWormholeChainId", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "RefundAddressUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_WORMHOLE_ID", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedWhMessages", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - } - ], - "name": "quoteEVMDeliveryPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "_cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_payload", - "type": "bytes" - }, - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_sourceAddress", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_sourceChain", - "type": "uint16" - }, - { - "internalType": "bytes32", - "name": "_deliveryHash", - "type": "bytes32" - } - ], - "name": "receiveWormholeMessages", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "refundAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_updated", - "type": "address" - } - ], - "name": "setRefundAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19113188 - }, - "AvalancheHubConnectorStaging": { - "address": "0xd5aE7b90Dba594899977072e363bBf164E7B1D15", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_mirrorWormholeChainId", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "RefundAddressUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_WORMHOLE_ID", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedWhMessages", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - } - ], - "name": "quoteEVMDeliveryPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "_cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_payload", - "type": "bytes" - }, - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_sourceAddress", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_sourceChain", - "type": "uint16" - }, - { - "internalType": "bytes32", - "name": "_deliveryHash", - "type": "bytes32" - } - ], - "name": "receiveWormholeMessages", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "refundAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_updated", - "type": "address" - } - ], - "name": "setRefundAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19035337 - }, - "BaseHubConnector": { - "address": "0x23b7abe4cc664F24Eb68E80cFAdc572857799a94", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_optimismPortal", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPTIMISM_PORTAL", - "outputs": [ - { - "internalType": "contract IOptimismPortal", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19113187 - }, - "BaseHubConnectorStaging": { - "address": "0xAf00e0b7B5cE2D3a0B5d02DEc936254550228b61", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_optimismPortal", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPTIMISM_PORTAL", - "outputs": [ - { - "internalType": "contract IOptimismPortal", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19035336 - }, - "BnbHubConnector": { - "address": "0xae6B9cDE6191b710F5A18D82f751Ba52B78a99DA", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_mirrorWormholeChainId", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "RefundAddressUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_WORMHOLE_ID", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedWhMessages", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - } - ], - "name": "quoteEVMDeliveryPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "_cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_payload", - "type": "bytes" - }, - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_sourceAddress", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_sourceChain", - "type": "uint16" - }, - { - "internalType": "bytes32", - "name": "_deliveryHash", - "type": "bytes32" - } - ], - "name": "receiveWormholeMessages", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "refundAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_updated", - "type": "address" - } - ], - "name": "setRefundAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18737801 - }, - "BnbHubConnectorStaging": { - "address": "0x1b891D279a763426394c9E2100205005C0DCAf43", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_mirrorWormholeChainId", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "RefundAddressUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_WORMHOLE_ID", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedWhMessages", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - } - ], - "name": "quoteEVMDeliveryPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "_cost", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_payload", - "type": "bytes" - }, - { - "internalType": "bytes[]", - "name": "", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_sourceAddress", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_sourceChain", - "type": "uint16" - }, - { - "internalType": "bytes32", - "name": "_deliveryHash", - "type": "bytes32" - } - ], - "name": "receiveWormholeMessages", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "refundAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_updated", - "type": "address" - } - ], - "name": "setRefundAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982733 - }, - "BridgeFacet": { - "address": "0x61A67BC6E688663C612A2aA9003e0515e2bC838B", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 19178422 - }, - "BridgeFacetStaging": { - "address": "0xaC161cF406fF3c70f0BbdaE9cA37076D1c85AF4b", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 18982743 - }, - "Connext": { - "address": "0x8898B472C54c31894e3B9bb83cEA802a5d0e63C6", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 16233067 - }, - "ConnextStaging": { - "address": "0x5e1ba88978B1f9b61448C5e6881e21A7d771D139", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ConnextDiamond__fallback_facetNotExit", - "type": "error" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18982753 - }, - "ConnextStaging_DiamondProxy": { - "address": "0x5e1ba88978B1f9b61448C5e6881e21A7d771D139", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ConnextDiamond__fallback_facetNotExit", - "type": "error" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18982753 - }, - "Connext_DiamondProxy": { - "address": "0x8898B472C54c31894e3B9bb83cEA802a5d0e63C6", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 16233067 - }, - "DiamondCutFacet": { - "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondCutFacetStaging": { - "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondInit": { - "address": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondInitStaging": { - "address": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982751 - }, - "GnosisHubConnector": { - "address": "0xF1c78967584D5E0ffF66dA103b8eb06c82EC020d", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_mirrorChainId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "GasFloorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_CHAIN_ID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_signatures", - "type": "bytes" - } - ], - "name": "executeSignatures", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "floor", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_floor", - "type": "uint256" - } - ], - "name": "setGasFloor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18737803 - }, - "GnosisHubConnectorStaging": { - "address": "0xa98f36ca759271928d18AE9b8BC6e214C279fDeD", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_mirrorChainId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "GasFloorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_CHAIN_ID", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_signatures", - "type": "bytes" - } - ], - "name": "executeSignatures", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "floor", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_floor", - "type": "uint256" - } - ], - "name": "setGasFloor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982734 - }, - "InboxFacet": { - "address": "0x5Ccd25372A41eeB3D4E5353879Bb28213dF5a295", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16233047 - }, - "InboxFacetStaging": { - "address": "0x5efE4a498a9b4Ea0DC86e1772A17Dc62Ab4105AD", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982744 - }, - "LPToken": { - "address": "0xf7DE5aCeEeE6091d1103209C337fA00D0B4b9092", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "initialize", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16023345 - }, - "LineaHubConnector": { - "address": "0x56Ab287e5c33Ee70158c951f34818bd095446255", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18737822 - }, - "LineaHubConnectorStaging": { - "address": "0x89285703326a9b3192841f67121DD714E4968689", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - } - ], - "name": "claimMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982737 - }, - "MainnetSpokeConnector": { - "address": "0x02fdF04AF077687CDA03Bd3162388b7972A4a1Cc", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "watcherManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minDisputeBlocks", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "disputeBlocks", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.ConstructorParams", - "name": "_baseSpokeParams", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_finalize__DeprecatedInHubDomain", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_proposeAggregateRoot__DeprecatedInHubDomain", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_saveAggregateRoot__CallerIsNotRootManager", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_saveAggregateRoot__EmptyRoot", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_saveAggregateRoot__OnlyOptimisticMode", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_saveAggregateRoot__RootAlreadyProven", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_activateOptimisticMode__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_constructor__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__InvalidInputHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposedHashIsFinalizedHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyOptimisticMode__SlowModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyProposer__NotAllowlistedProposer", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_proposeAggregateRoot__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_receiveAggregateRoot__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "endOfDispute", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "AggregateRootProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "MinDisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "OptimisticModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "PendingAggregateRootDeleted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "ProposedRootFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "SlowModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "name": "SnapshotRootSaved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FINALIZED_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateOptimisticMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateSlowMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "addProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedProposers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getLastCompletedSnapshotId", - "outputs": [ - { - "internalType": "uint256", - "name": "_lastCompletedSnapshotId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSnapshotDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "_snapshotDuration", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDisputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "optimisticMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregateRootHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "removeProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - } - ], - "name": "saveAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "name": "setDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - } - ], - "name": "setMinDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "snapshotRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18737765 - }, - "MainnetSpokeConnectorStaging": { - "address": "0x1dB5Ee7B6235e6C31EFb4b3eE45190Ca14E1a214", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "watcherManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minDisputeBlocks", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "disputeBlocks", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.ConstructorParams", - "name": "_baseSpokeParams", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_finalize__DeprecatedInHubDomain", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_proposeAggregateRoot__DeprecatedInHubDomain", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_saveAggregateRoot__CallerIsNotRootManager", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_saveAggregateRoot__EmptyRoot", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_saveAggregateRoot__OnlyOptimisticMode", - "type": "error" - }, - { - "inputs": [], - "name": "MainnetSpokeConnector_saveAggregateRoot__RootAlreadyProven", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_activateOptimisticMode__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_constructor__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__InvalidInputHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposedHashIsFinalizedHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyOptimisticMode__SlowModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyProposer__NotAllowlistedProposer", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_proposeAggregateRoot__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_receiveAggregateRoot__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "endOfDispute", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "AggregateRootProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "MinDisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "OptimisticModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "PendingAggregateRootDeleted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "ProposedRootFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "SlowModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "name": "SnapshotRootSaved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FINALIZED_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateOptimisticMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateSlowMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "addProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedProposers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getLastCompletedSnapshotId", - "outputs": [ - { - "internalType": "uint256", - "name": "_lastCompletedSnapshotId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSnapshotDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "_snapshotDuration", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDisputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "optimisticMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregateRootHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "removeProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - } - ], - "name": "saveAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "name": "setDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - } - ], - "name": "setMinDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "snapshotRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982731 - }, - "MantleHubConnector": { - "address": "0x5B0E1a507E786f0a7c11C972ad5F4dd254661e24", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_stateCommitmentChain", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_target", - "type": "address" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageNonce", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "batchIndex", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "batchRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "batchSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prevTotalElements", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct ChainBatchHeader", - "name": "stateRootBatchHeader", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "siblings", - "type": "bytes32[]" - } - ], - "internalType": "struct ChainInclusionProof", - "name": "stateRootProof", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "stateTrieWitness", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "storageTrieWitness", - "type": "bytes" - } - ], - "internalType": "struct L2MessageInclusionProof", - "name": "_proof", - "type": "tuple" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stateCommitmentChain", - "outputs": [ - { - "internalType": "contract IStateCommitmentChain", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19113186 - }, - "MantleHubConnectorStaging": { - "address": "0x5b447756e2E55CEB8d0e46217ea666CF3e037cdd", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_stateCommitmentChain", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_target", - "type": "address" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageNonce", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "batchIndex", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "batchRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "batchSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prevTotalElements", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct ChainBatchHeader", - "name": "stateRootBatchHeader", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "siblings", - "type": "bytes32[]" - } - ], - "internalType": "struct ChainInclusionProof", - "name": "stateRootProof", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "stateTrieWitness", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "storageTrieWitness", - "type": "bytes" - } - ], - "internalType": "struct L2MessageInclusionProof", - "name": "_proof", - "type": "tuple" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stateCommitmentChain", - "outputs": [ - { - "internalType": "contract IStateCommitmentChain", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19065805 - }, - "MerkleTreeManagerRoot": { - "address": "0xBAbb718A5C5D831aF3Fe252193E1E270D74fbA64", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__renounceOwnership_prohibited", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "incrementNonce", - "outputs": [ - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "leaves", - "outputs": [ - { - "internalType": "enum MerkleTreeManager.LeafStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProcessed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProven", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18737739 - }, - "MerkleTreeManagerRootStaging": { - "address": "0xCDFBaBa486b420e7f33AE043385d6c7A15F98EbD", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__renounceOwnership_prohibited", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "incrementNonce", - "outputs": [ - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "leaves", - "outputs": [ - { - "internalType": "enum MerkleTreeManager.LeafStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProcessed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProven", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18982724 - }, - "MerkleTreeManagerRootUpgradeBeacon": { - "address": "0x1717744698874C9290ebF32de10b7f7383fb4d7B", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 16232830 - }, - "MerkleTreeManagerRootUpgradeBeaconProxy": { - "address": "0x7D2596D7E44b0990611d390Fbb0Bd24e64845694", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 16232831 - }, - "MerkleTreeManagerRootUpgradeBeaconProxyStaging": { - "address": "0x021C2b7E89BdE462C97dE3c514C77e1C50563FD7", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982726 - }, - "MerkleTreeManagerRootUpgradeBeaconStaging": { - "address": "0x1776310F86aD9734481C6eACE46F01cDDfe0E5d2", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 18982725 - }, - "MerkleTreeManagerSpoke": { - "address": "0x7d590c6039898d0D91Ad4B0c08394a69FAAFd3b1", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__renounceOwnership_prohibited", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "incrementNonce", - "outputs": [ - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "leaves", - "outputs": [ - { - "internalType": "enum MerkleTreeManager.LeafStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProcessed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProven", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18737742 - }, - "MerkleTreeManagerSpokeStaging": { - "address": "0x1AB993a524c16Efa593DEB32cB135bD30c0A8dff", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__renounceOwnership_prohibited", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "incrementNonce", - "outputs": [ - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "leaves", - "outputs": [ - { - "internalType": "enum MerkleTreeManager.LeafStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProcessed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProven", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18982728 - }, - "MerkleTreeManagerSpokeUpgradeBeacon": { - "address": "0x23a399a7BBba31a61EB0620f1e8B6f250a5b76de", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 16232837 - }, - "MerkleTreeManagerSpokeUpgradeBeaconProxy": { - "address": "0x28a9e7bbed277092e2431f186e1af898962d4e92", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 16232868 - }, - "MerkleTreeManagerSpokeUpgradeBeaconProxyStaging": { - "address": "0xdb649f880194e9C2269Af1A503126c79ddF8053C", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982730 - }, - "MerkleTreeManagerSpokeUpgradeBeaconStaging": { - "address": "0x28a274e9668C9c9DE601334A33D406A0356A1a50", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 18982729 - }, - "MetisHubConnector": { - "address": "0x9Ba7D2Ab079Bd1924859e2fECDAD1bEBe5B119Fa", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_stateCommitmentChain", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_target", - "type": "address" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageNonce", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "batchIndex", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "batchRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "batchSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prevTotalElements", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct ChainBatchHeader", - "name": "stateRootBatchHeader", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "siblings", - "type": "bytes32[]" - } - ], - "internalType": "struct ChainInclusionProof", - "name": "stateRootProof", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "stateTrieWitness", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "storageTrieWitness", - "type": "bytes" - } - ], - "internalType": "struct L2MessageInclusionProof", - "name": "_proof", - "type": "tuple" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stateCommitmentChain", - "outputs": [ - { - "internalType": "contract IStateCommitmentChain", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19113184 - }, - "MetisHubConnectorStaging": { - "address": "0x5FA89ea322708b30882D3aa3a9fC3DA4775274c0", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_stateCommitmentChain", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_target", - "type": "address" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageNonce", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "batchIndex", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "batchRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "batchSize", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "prevTotalElements", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct ChainBatchHeader", - "name": "stateRootBatchHeader", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "siblings", - "type": "bytes32[]" - } - ], - "internalType": "struct ChainInclusionProof", - "name": "stateRootProof", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "stateTrieWitness", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "storageTrieWitness", - "type": "bytes" - } - ], - "internalType": "struct L2MessageInclusionProof", - "name": "_proof", - "type": "tuple" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stateCommitmentChain", - "outputs": [ - { - "internalType": "contract IStateCommitmentChain", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19063536 - }, - "MultiSend": { - "address": "0x7e4490E97c8243D844719f26a0b47fD5A59fDc2e", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 16243562 - }, - "OptimismHubConnector": { - "address": "0x5c2149869146DeA55cDD1CF2DD828e4e1548bb2A", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_optimismPortal", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPTIMISM_PORTAL", - "outputs": [ - { - "internalType": "contract IOptimismPortal", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18737767 - }, - "OptimismHubConnectorStaging": { - "address": "0x4d9F990E96d7B9180c7cAFe003456AdD60aA9860", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_optimismPortal", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPTIMISM_PORTAL", - "outputs": [ - { - "internalType": "contract IOptimismPortal", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982732 - }, - "PolygonHubConnector": { - "address": "0xE8cF9EbB1cFB137c692a0a4E470E257B9417d116", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_checkPointManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_MESSAGE_EVENT_SIG", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "checkpointManager", - "outputs": [ - { - "internalType": "contract ICheckpointManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxChildTunnel", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxRoot", - "outputs": [ - { - "internalType": "contract IFxStateSender", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedExits", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "inputData", - "type": "bytes" - } - ], - "name": "receiveMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18737808 - }, - "PolygonHubConnectorStaging": { - "address": "0x62C3f15Eee9A932B90c64B07c02EE9962b8DbB5A", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_checkPointManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_MESSAGE_EVENT_SIG", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "checkpointManager", - "outputs": [ - { - "internalType": "contract ICheckpointManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxChildTunnel", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxRoot", - "outputs": [ - { - "internalType": "contract IFxStateSender", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedExits", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "inputData", - "type": "bytes" - } - ], - "name": "receiveMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18982735 - }, - "PolygonZkHubConnector": { - "address": "0x7ed49D0a13255802A281C08688563bd8D5f726b1", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_mirrorNetworkId", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onMessageReceived", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19113185 - }, - "PolygonZkHubConnectorStaging": { - "address": "0xD2a6cDd411d8d7357a0E87b8fDBa6ae53B4A231d", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_mirrorNetworkId", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onMessageReceived", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19035334 - }, - "PortalFacet": { - "address": "0x7993Bb17D8D8A0676Cc1527f8b4CE52A2B490352", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16233053 - }, - "PortalFacetStaging": { - "address": "0x04B83cdACB4D6548aC583AFdEF6677128A789428", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982746 - }, - "ProposedOwnableFacet": { - "address": "0x086B5A16D7Bd6B2955fCC7d5F9AA2a1544b67e0d", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16233051 - }, - "ProposedOwnableFacetStaging": { - "address": "0xF28Eeca075D63886C6152672b926CF89d9782780", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982745 - }, - "RelayerFacet": { - "address": "0xcCb64fDf1c0Cc1aac1C39E5968E82f89c1B8C769", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16233054 - }, - "RelayerFacetStaging": { - "address": "0x5cC220030AFf5a2068A62FEaC09553f0B6604f60", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982747 - }, - "RelayerProxyHub": { - "address": "0xB4F8D176466f5F544bAd53737bffAaeA17185c05", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "keep3r", - "type": "address" - }, - { - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "autonolas", - "type": "address" - }, - { - "internalType": "uint256", - "name": "propagateCooldown", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalizeCooldown", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "proposeAggregateRootCooldown", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "hubConnectors", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "hubConnectorChains", - "type": "uint32[]" - } - ], - "internalType": "struct RelayerProxyHub.HubConstructorParams", - "name": "_params", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxyHub__processFromRoot_alreadyProcessed", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxyHub__processFromRoot_noHubConnector", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxyHub__processFromRoot_unsupportedChain", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxyHub__propagateCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "RelayerProxyHub__validateProposeSignature_notProposer", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__addRelayer_relayerAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__definedAddress_empty", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__finalizeCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__isWorkableBySender_notWorkable", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__onlyRelayer_notRelayer", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__proposeAggregateRootCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__removeRelayer_relayerNotAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__validateAndPayWithCredits_notKeep3r", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "RelayerProxy__validateProposeSignature_notProposer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "AutonolasChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum RelayerProxyHub.AutonolasPriorityFunction", - "name": "fn", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "updated", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "previous", - "type": "uint8" - } - ], - "name": "AutonolasPriorityChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "finalizeCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldFinalizeCooldown", - "type": "uint256" - } - ], - "name": "FinalizeCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "hubConnector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldHubConnector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "chain", - "type": "uint32" - } - ], - "name": "HubConnectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "Keep3rChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "propagateCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldPropagateCooldown", - "type": "uint256" - } - ], - "name": "PropagateCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposeAggregateRootCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldProposeAggregateRootCooldown", - "type": "uint256" - } - ], - "name": "ProposeAggregateRootCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldRootManager", - "type": "address" - } - ], - "name": "RootManagerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "autonolas", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum RelayerProxyHub.AutonolasPriorityFunction", - "name": "", - "type": "uint8" - } - ], - "name": "autonolasPriority", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalizeAndPropagate", - "outputs": [ - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalizeAndPropagateKeep3r", - "outputs": [ - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "finalizeCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalizeOnRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "hubConnectors", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keep3r", - "outputs": [ - { - "internalType": "contract IKeep3rV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastFinalizeAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPropagateAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastProposeAggregateRootAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "_fromChain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_l2Hash", - "type": "bytes32" - } - ], - "name": "processFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "_fromChain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_l2Hash", - "type": "bytes32" - } - ], - "name": "processFromRootKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedRootMessages", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_messageFees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "propagate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "propagateCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_messageFees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - } - ], - "name": "propagateKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - } - ], - "name": "propagateWorkable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeAggregateRootCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_snapshotId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_snapshotsRoots", - "type": "bytes32[]" - }, - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - } - ], - "name": "proposeAggregateRootOnRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_snapshotId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_snapshotsRoots", - "type": "bytes32[]" - }, - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - } - ], - "name": "proposeAggregateRootOnRootKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootManager", - "outputs": [ - { - "internalType": "contract IRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sendRootToHubSpoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_autonolas", - "type": "address" - } - ], - "name": "setAutonolas", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum RelayerProxyHub.AutonolasPriorityFunction", - "name": "_function", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "_autonolasPriority", - "type": "uint8" - } - ], - "name": "setAutonolasPriority", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_finalizeCooldown", - "type": "uint256" - } - ], - "name": "setFinalizeCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_hubConnector", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_chain", - "type": "uint32" - } - ], - "name": "setHubConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_keep3r", - "type": "address" - } - ], - "name": "setKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_propagateCooldown", - "type": "uint256" - } - ], - "name": "setPropagateCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_proposeCooldown", - "type": "uint256" - } - ], - "name": "setProposeAggregateRootCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - } - ], - "name": "setRootManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 18737823 - }, - "RelayerProxyHubStaging": { - "address": "0xDf5BBcF1A489AE20A4027aCce7D6e10D05F9Cf5B", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "keep3r", - "type": "address" - }, - { - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "autonolas", - "type": "address" - }, - { - "internalType": "uint256", - "name": "propagateCooldown", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalizeCooldown", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "proposeAggregateRootCooldown", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "hubConnectors", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "hubConnectorChains", - "type": "uint32[]" - } - ], - "internalType": "struct RelayerProxyHub.HubConstructorParams", - "name": "_params", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxyHub__processFromRoot_alreadyProcessed", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxyHub__processFromRoot_noHubConnector", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxyHub__processFromRoot_unsupportedChain", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxyHub__propagateCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "RelayerProxyHub__validateProposeSignature_notProposer", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__addRelayer_relayerAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__definedAddress_empty", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__finalizeCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__isWorkableBySender_notWorkable", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__onlyRelayer_notRelayer", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__proposeAggregateRootCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__removeRelayer_relayerNotAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__validateAndPayWithCredits_notKeep3r", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "RelayerProxy__validateProposeSignature_notProposer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "AutonolasChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "enum RelayerProxyHub.AutonolasPriorityFunction", - "name": "fn", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "updated", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "previous", - "type": "uint8" - } - ], - "name": "AutonolasPriorityChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "finalizeCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldFinalizeCooldown", - "type": "uint256" - } - ], - "name": "FinalizeCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "hubConnector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldHubConnector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "chain", - "type": "uint32" - } - ], - "name": "HubConnectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "Keep3rChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "propagateCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldPropagateCooldown", - "type": "uint256" - } - ], - "name": "PropagateCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposeAggregateRootCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldProposeAggregateRootCooldown", - "type": "uint256" - } - ], - "name": "ProposeAggregateRootCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldRootManager", - "type": "address" - } - ], - "name": "RootManagerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "autonolas", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum RelayerProxyHub.AutonolasPriorityFunction", - "name": "", - "type": "uint8" - } - ], - "name": "autonolasPriority", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalizeAndPropagate", - "outputs": [ - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalizeAndPropagateKeep3r", - "outputs": [ - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "finalizeCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalizeOnRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "hubConnectors", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keep3r", - "outputs": [ - { - "internalType": "contract IKeep3rV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastFinalizeAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPropagateAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastProposeAggregateRootAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "_fromChain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_l2Hash", - "type": "bytes32" - } - ], - "name": "processFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "_fromChain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_l2Hash", - "type": "bytes32" - } - ], - "name": "processFromRootKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedRootMessages", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_messageFees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "propagate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "propagateCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_messageFees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - } - ], - "name": "propagateKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - } - ], - "name": "propagateWorkable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeAggregateRootCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_snapshotId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_snapshotsRoots", - "type": "bytes32[]" - }, - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - } - ], - "name": "proposeAggregateRootOnRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_snapshotId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_snapshotsRoots", - "type": "bytes32[]" - }, - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - } - ], - "name": "proposeAggregateRootOnRootKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootManager", - "outputs": [ - { - "internalType": "contract IRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sendRootToHubSpoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_autonolas", - "type": "address" - } - ], - "name": "setAutonolas", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum RelayerProxyHub.AutonolasPriorityFunction", - "name": "_function", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "_autonolasPriority", - "type": "uint8" - } - ], - "name": "setAutonolasPriority", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_finalizeCooldown", - "type": "uint256" - } - ], - "name": "setFinalizeCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_hubConnector", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_chain", - "type": "uint32" - } - ], - "name": "setHubConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_keep3r", - "type": "address" - } - ], - "name": "setKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_propagateCooldown", - "type": "uint256" - } - ], - "name": "setPropagateCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_proposeCooldown", - "type": "uint256" - } - ], - "name": "setProposeAggregateRootCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - } - ], - "name": "setRootManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19035338 - }, - "RootManager": { - "address": "0x523AB7424AD126809b1d7A134eb6E0ee414C9B3A", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager__renounceOwnership_prohibited", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_activateOptimisticMode__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_aggregate__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_checkDomains__InvalidDomains", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_constructor__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_finalize__InvalidAggregateRoot", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_finalize__InvalidInputHash", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_finalize__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_onlyOptimisticMode__SlowModeOn", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RootManager_onlyProposer__NotWhitelistedProposer", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_propagate__AggregateRootIsZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - } - ], - "name": "RootManager_proposeAggregateRoot__InvalidSnapshotId", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_proposeAggregateRoot__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_sendRootToHub__NoMessageSent", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_setDisputeBlocks__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_setDisputeBlocks__SameDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_setHubDomain__InvalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "domainsHash", - "type": "bytes32" - } - ], - "name": "AggregateRootPropagated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "endOfDispute", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "baseRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "snapshotsRoots", - "type": "bytes32[]" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - } - ], - "name": "AggregateRootProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - } - ], - "name": "AggregateRootSavedOptimistic", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "leafCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "aggregatedRoots", - "type": "bytes32[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - } - ], - "name": "AggregateRootSavedSlow", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "connectors", - "type": "address[]" - } - ], - "name": "ConnectorAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "connectors", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ConnectorRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - } - ], - "name": "DomainAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "DomainRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "HubDomainCleared", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "HubDomainSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "MinDisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "OptimisticModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - } - ], - "name": "PropagateFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "fraudulentRoot", - "type": "bytes32" - } - ], - "name": "RootDiscarded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "receivedRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queueIndex", - "type": "uint256" - } - ], - "name": "RootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "SlowModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "DEQUEUE_MAX", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FINALIZED_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_DOMAINS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateOptimisticMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateSlowMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_connector", - "type": "address" - } - ], - "name": "addConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "addProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_inbound", - "type": "bytes32" - } - ], - "name": "aggregate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedProposers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "clearHubDomain", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "connectors", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connectorsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dequeue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - } - ], - "name": "discardRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "domains", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domainsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalizeAndPropagate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getConnectorForDomain", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getDomainIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPendingInboundRootsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSnapshotDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "_snapshotDuration", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "hubDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "isDomainSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "lastPropagatedRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSavedAggregateRootTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDisputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "optimisticMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingInboundRoots", - "outputs": [ - { - "internalType": "uint128", - "name": "first", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "last", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - } - ], - "name": "propagate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_snapshotId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_snapshotsRoots", - "type": "bytes32[]" - }, - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregateRootHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "removeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "removeProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "sendRootToHubSpoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "name": "setDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "setHubDomain", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - } - ], - "name": "setMinDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "validAggregateRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - } - ], - "name": "validateConnectors", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - }, - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - } - ], - "name": "validateDomains", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18737740 - }, - "RootManagerStaging": { - "address": "0x0031d290B8526e2Eb6ac22111E5fF96EcA760258", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager__renounceOwnership_prohibited", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_activateOptimisticMode__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_aggregate__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_checkDomains__InvalidDomains", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_constructor__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_finalize__InvalidAggregateRoot", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_finalize__InvalidInputHash", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_finalize__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_onlyOptimisticMode__SlowModeOn", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RootManager_onlyProposer__NotWhitelistedProposer", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_propagate__AggregateRootIsZero", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - } - ], - "name": "RootManager_proposeAggregateRoot__InvalidSnapshotId", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_proposeAggregateRoot__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_sendRootToHub__NoMessageSent", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_setDisputeBlocks__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_setDisputeBlocks__SameDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_setHubDomain__InvalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "RootManager_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "domainsHash", - "type": "bytes32" - } - ], - "name": "AggregateRootPropagated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "endOfDispute", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "baseRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "snapshotsRoots", - "type": "bytes32[]" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - } - ], - "name": "AggregateRootProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - } - ], - "name": "AggregateRootSavedOptimistic", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "leafCount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "aggregatedRoots", - "type": "bytes32[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - } - ], - "name": "AggregateRootSavedSlow", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "connectors", - "type": "address[]" - } - ], - "name": "ConnectorAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "connectors", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ConnectorRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - } - ], - "name": "DomainAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "DomainRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "HubDomainCleared", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "HubDomainSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "MinDisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "OptimisticModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - } - ], - "name": "PropagateFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "fraudulentRoot", - "type": "bytes32" - } - ], - "name": "RootDiscarded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "receivedRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queueIndex", - "type": "uint256" - } - ], - "name": "RootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "SlowModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "DEQUEUE_MAX", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FINALIZED_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_DOMAINS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateOptimisticMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateSlowMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_connector", - "type": "address" - } - ], - "name": "addConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "addProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_inbound", - "type": "bytes32" - } - ], - "name": "aggregate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedProposers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "clearHubDomain", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "connectors", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connectorsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dequeue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - } - ], - "name": "discardRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "domains", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domainsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalizeAndPropagate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getConnectorForDomain", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getDomainIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPendingInboundRootsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSnapshotDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "_snapshotDuration", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "hubDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "isDomainSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "lastPropagatedRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSavedAggregateRootTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDisputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "optimisticMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingInboundRoots", - "outputs": [ - { - "internalType": "uint128", - "name": "first", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "last", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - } - ], - "name": "propagate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_snapshotId", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_snapshotsRoots", - "type": "bytes32[]" - }, - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregateRootHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "removeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "removeProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "sendRootToHubSpoke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "name": "setDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "setHubDomain", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - } - ], - "name": "setMinDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "validAggregateRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - } - ], - "name": "validateConnectors", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - }, - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - } - ], - "name": "validateDomains", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18982727 - }, - "RoutersFacet": { - "address": "0xBe8D8Ac9a44fBa6cb7A7E02c1E6576E06C7da72D", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16233056 - }, - "RoutersFacetStaging": { - "address": "0x97477e71B0dacd9581bf43bEcC1DB95d6b0A998E", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982748 - }, - "StableSwap": { - "address": "0x244944eE0988C419F81D3114C9175AF2cf095F44", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newWithdrawFee", - "type": "uint256" - } - ], - "name": "NewWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - } - ], - "indexed": false, - "internalType": "struct SwapUtilsExternal.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - } - ], - "name": "calculateSwapFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dy", - "type": "uint256" - } - ], - "name": "calculateSwapOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "calculateSwapOutFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - }, - { - "internalType": "address", - "name": "lpTokenTargetAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "swapStorage", - "outputs": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16023405 - }, - "StableSwapFacet": { - "address": "0x9AB5F562Dc2aCcCd1b80d6564B770786e38f0686", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16233058 - }, - "StableSwapFacetStaging": { - "address": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982749 - }, - "SwapAdminFacet": { - "address": "0x6369F971fd1f1f230B8584151Ed7747FF710Cc68", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16233059 - }, - "SwapAdminFacetStaging": { - "address": "0x273c33499f774D2C2466ef95352A7016474C43ee", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982750 - }, - "SwapUtilsExternal": { - "address": "0x32171357233C988c3725924505F17A0F0884c31C", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - } - ], - "name": "getD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "preciseA", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - } - ], - "name": "getY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "d", - "type": "uint256" - } - ], - "name": "getYD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "blockNumber": 16023371 - }, - "TestERC20": { - "address": "0x29240a275cddde26BbD6d80fA8ad315C35F91604", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18983161 - }, - "TokenFacet": { - "address": "0xe37d4F73ef1C85dEf2174A394f17Ac65DD3cBB81", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16233037 - }, - "TokenFacetStaging": { - "address": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "Unwrapper": { - "address": "0x268682b7D9992aE7e2ca4A8bCc9D9655FB06056F", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "wrapper", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "WrongAsset", - "type": "event" - }, - { - "inputs": [], - "name": "CONNEXT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WRAPPER", - "outputs": [ - { - "internalType": "contract IWrapper", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "sweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "unwrapAndSweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "name": "xReceive", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 16473057 - }, - "UpgradeBeaconController": { - "address": "0x9283c1fb0d69a737b766ef1c15833358e01ac620", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 16232825 - }, - "UpgradeBeaconControllerStaging": { - "address": "0xdFffD98Ad28086D7D072632BA7bDF1BBcFc087D5", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 18982723 - }, - "WatcherManager": { - "address": "0x79e6E0242405A66B2dd8B96DEd3b2F0216Fd417d", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18737718 - }, - "WatcherManagerStaging": { - "address": "0x89Bb312259b003186A6D8D1B20C012CE9E22dba6", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 18982722 - }, - "ZkSyncHubConnector": { - "address": "0x63C6c79F3E79406B62f8623881cBFD7B2Ec1E8cB", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_l2BlockNumber", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_l2MessageIndex", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_l2TxNumberInBlock", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes32[]", - "name": "_proof", - "type": "bytes32[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19113183 - }, - "ZkSyncHubConnectorStaging": { - "address": "0x18a7a4e4C70fcec6Eb4844eb84bc98523F58b898", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_l2BlockNumber", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_l2MessageIndex", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_l2TxNumberInBlock", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes32[]", - "name": "_proof", - "type": "bytes32[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 19035303 - }, - "_DefaultDiamondERC165Init": { - "address": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "interfaceIds", - "type": "bytes4[]" - }, - { - "internalType": "bytes4[]", - "name": "interfaceIdsToRemove", - "type": "bytes4[]" - } - ], - "name": "setERC165", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "_DefaultDiamondLoupeFacet": { - "address": "0x3Bcf4185443A339517aD4e580067f178d1B68E1D", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 0 - } - } - } - ], - "5": [ - { - "name": "5_production_fork", - "chainId": "5", - "contracts": { - "ArbitrumHubConnector": { - "address": "0x58d3464e5AAb9c598A7059d182720a04aD59b01F", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_outbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_maxSubmissionCostCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxGasCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_gasPriceCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "NotCrossChainCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasPriceCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "MaxGasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "MaxSubmissionCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "ticketId", - "type": "uint256" - } - ], - "name": "RetryableTicketCreated", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPriceCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxGasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxSubmissionCostCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outbox", - "outputs": [ - { - "internalType": "contract IArbitrumOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_nodeNum", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_sendRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_proof", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "l2Sender", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "l2Block", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l1Block", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct L2Message", - "name": "_message", - "type": "tuple" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rollup", - "outputs": [ - { - "internalType": "contract IArbitrumRollup", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setGasPriceCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setMaxGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setMaxSubmissionCostCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8173347 - }, - "ArbitrumHubConnectorStaging": { - "address": "0x7Cc2798d6f7C00E19F6DA0eFD9e4a0c5497FD928", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_outbox", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_maxSubmissionCostCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxGasCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_gasPriceCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "NotCrossChainCall", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasPriceCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "MaxGasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "MaxSubmissionCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "ticketId", - "type": "uint256" - } - ], - "name": "RetryableTicketCreated", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPriceCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxGasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxSubmissionCostCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outbox", - "outputs": [ - { - "internalType": "contract IArbitrumOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_nodeNum", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_sendRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_blockHash", - "type": "bytes32" - }, - { - "internalType": "bytes32[]", - "name": "_proof", - "type": "bytes32[]" - }, - { - "internalType": "uint256", - "name": "_index", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "address", - "name": "l2Sender", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "l2Block", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l1Block", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "l2Timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "internalType": "struct L2Message", - "name": "_message", - "type": "tuple" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rollup", - "outputs": [ - { - "internalType": "contract IArbitrumRollup", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setGasPriceCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setMaxGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "setMaxSubmissionCostCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8170993 - }, - "BigBroERC20": { - "address": "0x2D4A671E49d39Fc13F9237f60B6E6FDd16d8Ad4d", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 8124903 - }, - "BridgeFacet": { - "address": "0xaC161cF406fF3c70f0BbdaE9cA37076D1c85AF4b", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "BridgeFacetStaging": { - "address": "0xaC161cF406fF3c70f0BbdaE9cA37076D1c85AF4b", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "Connext": { - "address": "0xFCa08024A6D4bCc87275b1E4A1E22B71fAD7f649", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 8173349 - }, - "ConnextStaging": { - "address": "0xC0a8BC9E98BD1bEeEC0a1b127BDb3e9a5fb7EC6C", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 8162909 - }, - "ConnextStaging_DiamondProxy": { - "address": "0xC0a8BC9E98BD1bEeEC0a1b127BDb3e9a5fb7EC6C", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8162909 - }, - "Connext_DiamondProxy": { - "address": "0xFCa08024A6D4bCc87275b1E4A1E22B71fAD7f649", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8173349 - }, - "ConsensysHubConnector": { - "address": "0x9F02B394d8f0E2dF3f6913F375CD1F919c03987D", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8507559 - }, - "ConsensysHubConnectorStaging": { - "address": "0x8b524d816113D79838A5Ea3cEAa5e51Be79014c5", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8502996 - }, - "DiamondCutFacet": { - "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondCutFacetStaging": { - "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondInit": { - "address": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondInitStaging": { - "address": "0x18ecE1437793f7a786ef4E32d9F6C239890a7d9e", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "InboxFacet": { - "address": "0x5efE4a498a9b4Ea0DC86e1772A17Dc62Ab4105AD", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "InboxFacetStaging": { - "address": "0x5efE4a498a9b4Ea0DC86e1772A17Dc62Ab4105AD", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "LPToken": { - "address": "0x90E10B6F3A44e90a1F54E79b0E8a6A428e57ec0C", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "MINIMUM_LIQUIDITY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "initialize", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 7769643 - }, - "MainnetSpokeConnector": { - "address": "0xE9c7095c956F9F75e21dD99027aDF6bFfFa9BA9A", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "messages", - "outputs": [ - { - "internalType": "enum SpokeConnector.MessageStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8173343 - }, - "MainnetSpokeConnectorStaging": { - "address": "0x1A1FcD6FE9372E6e9391FEDBe249A9a7E32D8Aaf", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "messages", - "outputs": [ - { - "internalType": "enum SpokeConnector.MessageStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8170989 - }, - "MerkleTreeManagerRoot": { - "address": "0xbE0d562E4e0B915bA5c1F11709C4DD9b07122493", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8173335 - }, - "MerkleTreeManagerRootStaging": { - "address": "0x5038bFa7dB9DaDf77907f90FcAC672F108fC6f74", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8162894 - }, - "MerkleTreeManagerRootUpgradeBeacon": { - "address": "0xc8DFD5ef63aE13b27fE0b9d3562CEa7e85632b46", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 8173336 - }, - "MerkleTreeManagerRootUpgradeBeaconProxy": { - "address": "0x2A2A9a4B612678E081b74a0bBcfD51DE726a9bd7", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8173338 - }, - "MerkleTreeManagerRootUpgradeBeaconProxyStaging": { - "address": "0xc18C57043055a4619f62937c803C10373e311182", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8162897 - }, - "MerkleTreeManagerRootUpgradeBeaconStaging": { - "address": "0x578b2f79D751DD5C8DF49c9EEe72a77fdAdC1269", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 8162895 - }, - "MerkleTreeManagerSpoke": { - "address": "0x8c42d05ca4acCF74Da2200d5d64C3A963c0ED06B", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8173340 - }, - "MerkleTreeManagerSpokeStaging": { - "address": "0x315d6A51dE29d1Ed10658fdf99FC238BB2a10801", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8162899 - }, - "MerkleTreeManagerSpokeUpgradeBeacon": { - "address": "0x53dC0EAb584235F20E1b02e61F9Ed0363e398EAa", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 8173341 - }, - "MerkleTreeManagerSpokeUpgradeBeaconProxy": { - "address": "0x7839D0b5486d8d7fDD0dc4195426681f08a7b3fe", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8173342 - }, - "MerkleTreeManagerSpokeUpgradeBeaconProxyStaging": { - "address": "0x15D889ba5ec6548AE158a85953D907c6D78DE834", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8162903 - }, - "MerkleTreeManagerSpokeUpgradeBeaconStaging": { - "address": "0xDFaef852901CD04Cb1d29B17039a75cfAA2f65F1", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 8162901 - }, - "MultiSend": { - "address": "0x4c24746eb19007195fa7b0DDb48b12251455ced1", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 8172293 - }, - "OptimismHubConnector": { - "address": "0x49174424E29950Ad18d07b4d9Ad2F77d0CbDDA2a", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_optimismPortal", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPTIMISM_PORTAL", - "outputs": [ - { - "internalType": "contract IOptimismPortal", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8703528 - }, - "OptimismHubConnectorStaging": { - "address": "0x1B28604731bfc5b589e6f5A8768cca2b1de20860", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_optimismPortal", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OPTIMISM_PORTAL", - "outputs": [ - { - "internalType": "contract IOptimismPortal", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct Types.WithdrawalTransaction", - "name": "_tx", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_l2OutputIndex", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "version", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "stateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "messagePasserStorageRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "latestBlockhash", - "type": "bytes32" - } - ], - "internalType": "struct Types.OutputRootProof", - "name": "_outputRootProof", - "type": "tuple" - }, - { - "internalType": "bytes[]", - "name": "_withdrawalProof", - "type": "bytes[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8699034 - }, - "PolygonHubConnector": { - "address": "0x9060E2B92a4e8D4EAd05B7f3D736e3DA33955fa5", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_checkPointManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_MESSAGE_EVENT_SIG", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "checkpointManager", - "outputs": [ - { - "internalType": "contract ICheckpointManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxChildTunnel", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxRoot", - "outputs": [ - { - "internalType": "contract IFxStateSender", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedExits", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "inputData", - "type": "bytes" - } - ], - "name": "receiveMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8173346 - }, - "PolygonHubConnectorStaging": { - "address": "0x73C7206B0b8aeeE14D73238139c4d25B3D044cAf", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_checkPointManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_MESSAGE_EVENT_SIG", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "checkpointManager", - "outputs": [ - { - "internalType": "contract ICheckpointManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxChildTunnel", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxRoot", - "outputs": [ - { - "internalType": "contract IFxStateSender", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedExits", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "inputData", - "type": "bytes" - } - ], - "name": "receiveMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8170992 - }, - "PolygonZkHubConnector": { - "address": "0xd045F03686575f042b21D0B3D20FFAE4D3a3482f", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_mirrorNetworkId", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "originAddress", - "type": "address" - }, - { - "internalType": "uint32", - "name": "originNetwork", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onMessageReceived", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8608178 - }, - "PortalFacet": { - "address": "0x04B83cdACB4D6548aC583AFdEF6677128A789428", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "PortalFacetStaging": { - "address": "0x04B83cdACB4D6548aC583AFdEF6677128A789428", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "ProposedOwnableFacet": { - "address": "0xF28Eeca075D63886C6152672b926CF89d9782780", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "ProposedOwnableFacetStaging": { - "address": "0xF28Eeca075D63886C6152672b926CF89d9782780", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerFacet": { - "address": "0x5cC220030AFf5a2068A62FEaC09553f0B6604f60", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerFacetStaging": { - "address": "0x5cC220030AFf5a2068A62FEaC09553f0B6604f60", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerProxyHub": { - "address": "0xe55162a662Abaf066D0fa6FFb720Dbe8Bc16342a", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - }, - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_keep3r", - "type": "address" - }, - { - "internalType": "address", - "name": "_autonolas", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_autonolasPriority", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "_propagateCooldown", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_hubConnectors", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "_hubConnectorChains", - "type": "uint32[]" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "chain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "l2Hash", - "type": "bytes32" - } - ], - "name": "RelayerProxyHub__processFromRoot_alreadyProcessed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "chain", - "type": "uint32" - } - ], - "name": "RelayerProxyHub__processFromRoot_noHubConnector", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nextWorkable", - "type": "uint256" - } - ], - "name": "RelayerProxyHub__propagateCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "RelayerProxy__addRelayer_relayerAdded", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "RelayerProxy__definedAddress_empty", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "RelayerProxy__isWorkableBySender_notWorkable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "RelayerProxy__onlyRelayer_notRelayer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "RelayerProxy__removeRelayer_relayerNotAdded", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "RelayerProxy__validateAndPayWithCredits_notKeep3r", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "AutonolasChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "updated", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "previous", - "type": "uint8" - } - ], - "name": "AutonolasPriorityChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "hubConnector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldHubConnector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "chain", - "type": "uint32" - } - ], - "name": "HubConnectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "Keep3rChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "propagateCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldPropagateCooldown", - "type": "uint256" - } - ], - "name": "PropagateCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldRootManager", - "type": "address" - } - ], - "name": "RootManagerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "autonolas", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "autonolasPriority", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "hubConnectors", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keep3r", - "outputs": [ - { - "internalType": "contract IKeep3rV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPropagateAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "priorityKeepers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "_fromChain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_l2Hash", - "type": "bytes32" - } - ], - "name": "processFromRootKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedRootMessages", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_messageFees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "propagate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "propagateCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_messageFees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - } - ], - "name": "propagateKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "propagateWorkable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootManager", - "outputs": [ - { - "internalType": "contract IRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_autonolas", - "type": "address" - } - ], - "name": "setAutonolas", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_autonolasPriority", - "type": "uint8" - } - ], - "name": "setAutonolasPriority", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_hubConnector", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_chain", - "type": "uint32" - } - ], - "name": "setHubConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_keep3r", - "type": "address" - } - ], - "name": "setKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_propagateCooldown", - "type": "uint256" - } - ], - "name": "setPropagateCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - } - ], - "name": "setRootManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8743833 - }, - "RelayerProxyHubStaging": { - "address": "0x811Aecd063da20717E885862Bcb7Dd9383F207a9", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - }, - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_keep3r", - "type": "address" - }, - { - "internalType": "address", - "name": "_autonolas", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_autonolasPriority", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "_propagateCooldown", - "type": "uint256" - }, - { - "internalType": "address[]", - "name": "_hubConnectors", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "_hubConnectorChains", - "type": "uint32[]" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "chain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "l2Hash", - "type": "bytes32" - } - ], - "name": "RelayerProxyHub__processFromRoot_alreadyProcessed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "chain", - "type": "uint32" - } - ], - "name": "RelayerProxyHub__processFromRoot_noHubConnector", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nextWorkable", - "type": "uint256" - } - ], - "name": "RelayerProxyHub__propagateCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "RelayerProxy__addRelayer_relayerAdded", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "RelayerProxy__definedAddress_empty", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "RelayerProxy__isWorkableBySender_notWorkable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "RelayerProxy__onlyRelayer_notRelayer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "RelayerProxy__removeRelayer_relayerNotAdded", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "RelayerProxy__validateAndPayWithCredits_notKeep3r", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "AutonolasChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "updated", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "previous", - "type": "uint8" - } - ], - "name": "AutonolasPriorityChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "hubConnector", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldHubConnector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "chain", - "type": "uint32" - } - ], - "name": "HubConnectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "Keep3rChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "propagateCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldPropagateCooldown", - "type": "uint256" - } - ], - "name": "PropagateCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldRootManager", - "type": "address" - } - ], - "name": "RootManagerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "autonolas", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "autonolasPriority", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "hubConnectors", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keep3r", - "outputs": [ - { - "internalType": "contract IKeep3rV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPropagateAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "priorityKeepers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint32", - "name": "_fromChain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_l2Hash", - "type": "bytes32" - } - ], - "name": "processFromRootKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processedRootMessages", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_messageFees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "propagate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "propagateCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_messageFees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - } - ], - "name": "propagateKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "propagateWorkable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootManager", - "outputs": [ - { - "internalType": "contract IRootManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_autonolas", - "type": "address" - } - ], - "name": "setAutonolas", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_autonolasPriority", - "type": "uint8" - } - ], - "name": "setAutonolasPriority", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_hubConnector", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_chain", - "type": "uint32" - } - ], - "name": "setHubConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_keep3r", - "type": "address" - } - ], - "name": "setKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_propagateCooldown", - "type": "uint256" - } - ], - "name": "setPropagateCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - } - ], - "name": "setRootManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8744010 - }, - "RootManager": { - "address": "0x94e1c90fb33FEc184B183625BBf096F713CA74a3", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "connectors", - "type": "address[]" - } - ], - "name": "ConnectorAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "connectors", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ConnectorRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - } - ], - "name": "DomainAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "DomainRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - } - ], - "name": "PropagateFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "fraudulentRoot", - "type": "bytes32" - } - ], - "name": "RootDiscarded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "domainsHash", - "type": "bytes32" - } - ], - "name": "RootPropagated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "receivedRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queueIndex", - "type": "uint256" - } - ], - "name": "RootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "aggregatedMessageRoots", - "type": "bytes32[]" - } - ], - "name": "RootsAggregated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "DEQUEUE_MAX", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_DOMAINS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_connector", - "type": "address" - } - ], - "name": "addConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_inbound", - "type": "bytes32" - } - ], - "name": "aggregate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "connectors", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connectorsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dequeue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - } - ], - "name": "discardRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "domains", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domainsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getConnectorForDomain", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getDomainIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPendingInboundRootsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "isDomainSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPropagatedRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingInboundRoots", - "outputs": [ - { - "internalType": "uint128", - "name": "first", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "last", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - } - ], - "name": "propagate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "removeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - } - ], - "name": "validateConnectors", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - }, - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - } - ], - "name": "validateDomains", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8173339 - }, - "RootManagerStaging": { - "address": "0x0310DB8043520BF31fBEf5350D1E3d451C6de68a", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "connectors", - "type": "address[]" - } - ], - "name": "ConnectorAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32[]", - "name": "domains", - "type": "uint32[]" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "connectors", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "ConnectorRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - } - ], - "name": "DomainAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "DomainRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "connector", - "type": "address" - } - ], - "name": "PropagateFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "fraudulentRoot", - "type": "bytes32" - } - ], - "name": "RootDiscarded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "domainsHash", - "type": "bytes32" - } - ], - "name": "RootPropagated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "receivedRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "queueIndex", - "type": "uint256" - } - ], - "name": "RootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "aggregatedMessageRoots", - "type": "bytes32[]" - } - ], - "name": "RootsAggregated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "DEQUEUE_MAX", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_DOMAINS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_connector", - "type": "address" - } - ], - "name": "addConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_inbound", - "type": "bytes32" - } - ], - "name": "aggregate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "connectors", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connectorsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "dequeue", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - } - ], - "name": "discardRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "domains", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domainsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getConnectorForDomain", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getDomainIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPendingInboundRootsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "isDomainSupported", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPropagatedRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingInboundRoots", - "outputs": [ - { - "internalType": "uint128", - "name": "first", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "last", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "_fees", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_encodedData", - "type": "bytes[]" - } - ], - "name": "propagate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "removeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - } - ], - "name": "validateConnectors", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32[]", - "name": "_domains", - "type": "uint32[]" - }, - { - "internalType": "address[]", - "name": "_connectors", - "type": "address[]" - } - ], - "name": "validateDomains", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8170987 - }, - "RoutersFacet": { - "address": "0x76A93A846547c46B45971ec0B22d9c0E884E9cf6", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RoutersFacetStaging": { - "address": "0x76A93A846547c46B45971ec0B22d9c0E884E9cf6", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "StableSwap": { - "address": "0xA1D8e02eEFaf5A3E0d09b0318b8848e3C98b54C9", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newWithdrawFee", - "type": "uint256" - } - ], - "name": "NewWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - } - ], - "indexed": false, - "internalType": "struct SwapUtilsExternal.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - } - ], - "name": "calculateSwapFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dy", - "type": "uint256" - } - ], - "name": "calculateSwapOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "calculateSwapOutFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - }, - { - "internalType": "address", - "name": "lpTokenTargetAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "swapStorage", - "outputs": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 8005171 - }, - "StableSwapFacet": { - "address": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "StableSwapFacetStaging": { - "address": "0x194A79B1EE4dA43D30cE8a35A32AbCEABe641aD2", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "StableSwapStaging": { - "address": "0x14B68C9a9a814Bc06e4548c2b5314deF3aF006B8", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newWithdrawFee", - "type": "uint256" - } - ], - "name": "NewWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - } - ], - "indexed": false, - "internalType": "struct SwapUtilsExternal.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - } - ], - "name": "calculateSwapFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dy", - "type": "uint256" - } - ], - "name": "calculateSwapOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "calculateSwapOutFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - }, - { - "internalType": "address", - "name": "lpTokenTargetAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "swapStorage", - "outputs": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 8164843 - }, - "SwapAdminFacet": { - "address": "0x273c33499f774D2C2466ef95352A7016474C43ee", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "SwapAdminFacetStaging": { - "address": "0x273c33499f774D2C2466ef95352A7016474C43ee", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "SwapUtilsExternal": { - "address": "0x6d5A3a9aB6a8439EAba917eD991De2b5DFc6b606", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - } - ], - "name": "getD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "preciseA", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - } - ], - "name": "getY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "d", - "type": "uint256" - } - ], - "name": "getYD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "blockNumber": 8005169 - }, - "SwapUtilsExternalStaging": { - "address": "0x2dA492af25728b64676DA323ee7ee27DdaFeA658", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - } - ], - "name": "getD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "preciseA", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - } - ], - "name": "getY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "d", - "type": "uint256" - } - ], - "name": "getYD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "blockNumber": 8164842 - }, - "TestAdopted": { - "address": "0x33CF113f786cE4017EaB8830E46b2283d2634BC4", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 8005167 - }, - "TestERC20": { - "address": "0x7ea6eA49B0b0Ae9c5db7907d139D9Cd3439862a1", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "detailsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "_newDecimals", - "type": "uint8" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_detailsHash", - "type": "bytes32" - } - ], - "name": "setDetailsHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 7459350 - }, - "TestWETH": { - "address": "0x4aBb2487fF5f734CBA51DAa2f6dc8680234d3532", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "detailsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "_newDecimals", - "type": "uint8" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_detailsHash", - "type": "bytes32" - } - ], - "name": "setDetailsHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 7466331 - }, - "TokenFacet": { - "address": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "TokenFacetStaging": { - "address": "0x62b3a7d4D1Cc43187C950A2C80253e5Cb67765cD", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "Unwrapper": { - "address": "0xa6633d369A9C4C8A442ef104E8e293DA7b352Acd", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "wrapper", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "WrongAsset", - "type": "event" - }, - { - "inputs": [], - "name": "CONNEXT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WRAPPER", - "outputs": [ - { - "internalType": "contract IWrapper", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "sweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "unwrapAndSweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "name": "xReceive", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8347473 - }, - "UpgradeBeaconController": { - "address": "0x106025ced78Cc21c9603e09857B4e2F9CB27710b", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 8173334 - }, - "UpgradeBeaconControllerStaging": { - "address": "0x64A6Dbb45AfF4269F2c67c1B5E6a17C29584541f", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 8162893 - }, - "WatcherManager": { - "address": "0xD24A76b5788cC97f6ED14168480AdC9D25D2faBb", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8173333 - }, - "WatcherManagerStaging": { - "address": "0x7fD17f3b32747C33Ae44e8F2318545658986e38f", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 8162892 - }, - "ZkSyncHubConnector": { - "address": "0x80231092091d752E1506D4aaB393675eBe388e9e", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_l2BlockNumber", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_l2MessageIndex", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_l2TxNumberInBlock", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes32[]", - "name": "_proof", - "type": "bytes32[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8584827 - }, - "ZkSyncHubConnectorStaging": { - "address": "0x541f3D4cA30B4C5162eb1C3A39e138f72219EdC1", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_l2BlockNumber", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_l2MessageIndex", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "_l2TxNumberInBlock", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes32[]", - "name": "_proof", - "type": "bytes32[]" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "processed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "sendMessage", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 8531169 - }, - "_DefaultDiamondERC165Init": { - "address": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "interfaceIds", - "type": "bytes4[]" - }, - { - "internalType": "bytes4[]", - "name": "interfaceIdsToRemove", - "type": "bytes4[]" - } - ], - "name": "setERC165", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "_DefaultDiamondLoupeFacet": { - "address": "0xCF790788Ef1DA81d555cEC33F04F7e9E13DCae11", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 0 - } - } - } - ], - "1088": [ - { - "name": "1088_production_fork", - "chainId": "1088", - "contracts": { - "BigBroERC20": { - "address": "0x9D3aCE4233Afe0F46F83e1Ac168C90F5c0Bb4DD5", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 11012528 - }, - "BridgeFacet": { - "address": "0xA401e30E6b7Eb50e9355a4FA8F29118d28386E33", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 13140407 - }, - "BridgeFacetStaging": { - "address": "0x683151d43758BB7A37e9d47386154d5Ae9b8AC48", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 10982154 - }, - "Connext": { - "address": "0x6B142227A277CE62808E0Df93202483547Ec0188", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ConnextDiamond__fallback_facetNotExit", - "type": "error" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 12940172 - }, - "ConnextStaging": { - "address": "0xFD81392229b6252cF761459d370C239Be3aFc54F", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ConnextDiamond__fallback_facetNotExit", - "type": "error" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 11012512 - }, - "ConnextStaging_DiamondProxy": { - "address": "0xFD81392229b6252cF761459d370C239Be3aFc54F", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ConnextDiamond__fallback_facetNotExit", - "type": "error" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 11012512 - }, - "Connext_DiamondProxy": { - "address": "0x6B142227A277CE62808E0Df93202483547Ec0188", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ConnextDiamond__fallback_facetNotExit", - "type": "error" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 12940172 - }, - "DiamondCutFacet": { - "address": "0xCbDC4132650aa2Cf85321c3308744CAE1cF2992b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939926 - }, - "DiamondCutFacetStaging": { - "address": "0xB8448C6f7f7887D36DcA487370778e419e9ebE3F", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982178 - }, - "DiamondInit": { - "address": "0x1aC32215b08806A5Bc5271D7FD77919C3C8ca84E", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 11012472 - }, - "DiamondInitStaging": { - "address": "0x962a39683A7EEC4597ABe34985D1C75334fC3E4c", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982180 - }, - "InboxFacet": { - "address": "0xeAc4bBCd50F2b418791d4194bbA23f7da4c81E1E", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939913 - }, - "InboxFacetStaging": { - "address": "0x63377166E406ee6A992b8E20961f047Bb12E4d81", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982157 - }, - "LPToken": { - "address": "0xbA7A99409aC88E15A1945A8A8a047Fe51BBf9D95", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "initialize", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10981533 - }, - "MerkleTreeManager": { - "address": "0xb646b737462081cD6Ba702BDeF05fbdB82EB84a1", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__renounceOwnership_prohibited", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "incrementNonce", - "outputs": [ - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "leaves", - "outputs": [ - { - "internalType": "enum MerkleTreeManager.LeafStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProcessed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProven", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 12939899 - }, - "MerkleTreeManagerStaging": { - "address": "0x6f8537dbaE3cE2a83547eBA87Ce2Bbe65a9a14C4", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__renounceOwnership_prohibited", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "incrementNonce", - "outputs": [ - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "_leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "leaves", - "outputs": [ - { - "internalType": "enum MerkleTreeManager.LeafStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProcessed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_leaf", - "type": "bytes32" - } - ], - "name": "markAsProven", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 10981424 - }, - "MerkleTreeManagerUpgradeBeacon": { - "address": "0x26aC458398aE1D58B7cE254c27eeA6ad850054a1", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 12939900 - }, - "MerkleTreeManagerUpgradeBeaconProxy": { - "address": "0x2C149ffebf7a4a5CE72a65280Cd5Af971f2D78B2", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 12939902 - }, - "MerkleTreeManagerUpgradeBeaconProxyStaging": { - "address": "0xF5E02C39A9d5028bb0ed0E37765136Ad9be3C195", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 10981432 - }, - "MerkleTreeManagerUpgradeBeaconStaging": { - "address": "0x8459C3B69fC20851e6c19576D0395f180aC677b2", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 10981428 - }, - "MetisSpokeConnector": { - "address": "0xbe9be105e64Ba861fE17e75c1cB622fD56eCd82D", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "watcherManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minDisputeBlocks", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "disputeBlocks", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.ConstructorParams", - "name": "_baseSpokeParams", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_activateOptimisticMode__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_constructor__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__InvalidInputHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposedHashIsFinalizedHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyOptimisticMode__SlowModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyProposer__NotAllowlistedProposer", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_proposeAggregateRoot__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_receiveAggregateRoot__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "endOfDispute", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "AggregateRootProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "MinDisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "OptimisticModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "PendingAggregateRootDeleted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "ProposedRootFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "SlowModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "name": "SnapshotRootSaved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FINALIZED_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateOptimisticMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateSlowMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "addProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedProposers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastCompletedSnapshotId", - "outputs": [ - { - "internalType": "uint256", - "name": "_lastCompletedSnapshotId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSnapshotDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "_snapshotDuration", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDisputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "optimisticMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregateRootHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "removeProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "name": "setDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - } - ], - "name": "setMinDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "snapshotRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 12939905 - }, - "MetisSpokeConnectorStaging": { - "address": "0x20098c6d481225fF5D9b2ca84cF68FC683e21031", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "watcherManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minDisputeBlocks", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "disputeBlocks", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.ConstructorParams", - "name": "_baseSpokeParams", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_activateOptimisticMode__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_constructor__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__InvalidInputHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_finalize__ProposedHashIsFinalizedHash", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyOptimisticMode__SlowModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_onlyProposer__NotAllowlistedProposer", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_proposeAggregateRoot__ProposeInProgress", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_receiveAggregateRoot__OptimisticModeOn", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__DisputeBlocksLowerThanMin", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setDisputeBlocks__SameDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "SpokeConnector_setMinDisputeBlocks__SameMinDisputeBlocksAsBefore", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "rootTimestamp", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "endOfDispute", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - } - ], - "name": "AggregateRootProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "DisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "GasCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "previous", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - } - ], - "name": "MinDisputeBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "OptimisticModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "PendingAggregateRootDeleted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - } - ], - "name": "ProposedRootFinalized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - } - ], - "name": "ProposerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "SlowModeActivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "name": "SnapshotRootSaved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FINALIZED_HASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateOptimisticMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activateSlowMode", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "addProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedProposers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "gasCap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastCompletedSnapshotId", - "outputs": [ - { - "internalType": "uint256", - "name": "_lastCompletedSnapshotId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSnapshotDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "_snapshotDuration", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDisputeBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "optimisticMode", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregateRootHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_proposer", - "type": "address" - } - ], - "name": "removeProposer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_disputeBlocks", - "type": "uint256" - } - ], - "name": "setDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasCap", - "type": "uint256" - } - ], - "name": "setGasCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minDisputeBlocks", - "type": "uint256" - } - ], - "name": "setMinDisputeBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "snapshotRoots", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 10981506 - }, - "MultiSend": { - "address": "0x97a92EEc0D389d601C67ba6057Ca5dca28cAEf54", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 11012527 - }, - "PortalFacet": { - "address": "0x191D761a722E13085e4c95B95CbCF3cC4938600a", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939916 - }, - "PortalFacetStaging": { - "address": "0x72c51564EcFa2344Cf168bfC4dFA7E64a560AEf4", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982162 - }, - "ProposedOwnableFacet": { - "address": "0xc40Ca3080cd6402446dcDb04383352bee81Df14E", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939915 - }, - "ProposedOwnableFacetStaging": { - "address": "0x51058D7bdA2661E134cC40137fC04Cf3a9087e53", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982160 - }, - "RelayerFacet": { - "address": "0xFD740111e2bA30435D589d32e232F6F5Ca80fc57", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939918 - }, - "RelayerFacetStaging": { - "address": "0xEc2140EB4A23e36ff676E18626A8652Ea2be47FB", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982164 - }, - "RelayerProxy": { - "address": "0xc188EF6Ce99318b53f8ef10cF8942e25bfB34c6C", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "keep3r", - "type": "address" - }, - { - "internalType": "uint256", - "name": "proposeAggregateRootCooldown", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalizeCooldown", - "type": "uint256" - } - ], - "internalType": "struct RelayerProxy.ConstructorParams", - "name": "_params", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__addRelayer_relayerAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__definedAddress_empty", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__finalizeCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__isWorkableBySender_notWorkable", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__onlyRelayer_notRelayer", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__proposeAggregateRootCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__removeRelayer_relayerNotAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__validateAndPayWithCredits_notKeep3r", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "RelayerProxy__validateProposeSignature_notProposer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "finalizeCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldFinalizeCooldown", - "type": "uint256" - } - ], - "name": "FinalizeCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "Keep3rChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposeAggregateRootCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldProposeAggregateRootCooldown", - "type": "uint256" - } - ], - "name": "ProposeAggregateRootCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "finalizeCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keep3r", - "outputs": [ - { - "internalType": "contract IKeep3rV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastFinalizeAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastProposeAggregateRootAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeAggregateRootCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_finalizeCooldown", - "type": "uint256" - } - ], - "name": "setFinalizeCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_keep3r", - "type": "address" - } - ], - "name": "setKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_proposeCooldown", - "type": "uint256" - } - ], - "name": "setProposeAggregateRootCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 12943498 - }, - "RelayerProxyStaging": { - "address": "0x742Bd9fC365eE6870121c4f3438149dfE4b36712", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - }, - { - "internalType": "address", - "name": "keep3r", - "type": "address" - }, - { - "internalType": "uint256", - "name": "proposeAggregateRootCooldown", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "finalizeCooldown", - "type": "uint256" - } - ], - "internalType": "struct RelayerProxy.ConstructorParams", - "name": "_params", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__addRelayer_relayerAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__definedAddress_empty", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__finalizeCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__isWorkableBySender_notWorkable", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__onlyRelayer_notRelayer", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__proposeAggregateRootCooledDown_notCooledDown", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__removeRelayer_relayerNotAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerProxy__validateAndPayWithCredits_notKeep3r", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "signer", - "type": "address" - } - ], - "name": "RelayerProxy__validateProposeSignature_notProposer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "finalizeCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldFinalizeCooldown", - "type": "uint256" - } - ], - "name": "FinalizeCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "Keep3rChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposeAggregateRootCooldown", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "oldProposeAggregateRootCooldown", - "type": "uint256" - } - ], - "name": "ProposeAggregateRootCooldownChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_proposedAggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_endOfDispute", - "type": "uint256" - } - ], - "name": "finalize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "finalizeCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "keep3r", - "outputs": [ - { - "internalType": "contract IKeep3rV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastFinalizeAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastProposeAggregateRootAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_rootTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_signature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proposeAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeAggregateRootCooldown", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_finalizeCooldown", - "type": "uint256" - } - ], - "name": "setFinalizeCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_keep3r", - "type": "address" - } - ], - "name": "setKeep3r", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_proposeCooldown", - "type": "uint256" - } - ], - "name": "setProposeAggregateRootCooldown", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 11017990 - }, - "RoutersFacet": { - "address": "0xeD1bED19080e62dE4cb09149942A18c7985095FF", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939920 - }, - "RoutersFacetStaging": { - "address": "0x0296da2Ce82eb3B98eB05925bC5777C7dA0d0F09", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982169 - }, - "StableSwapFacet": { - "address": "0xef2DCDdA295E49b264765c4D940c7743baeA9C9E", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939922 - }, - "StableSwapFacetStaging": { - "address": "0xD12345Cd15352ef5d4259BD2a918Fcb6943ce7a4", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982172 - }, - "StableSwapStaging": { - "address": "0x35fa03634A5f4cAa6c1a599a4a52f3A732e9b010", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newWithdrawFee", - "type": "uint256" - } - ], - "name": "NewWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - } - ], - "indexed": false, - "internalType": "struct SwapUtilsExternal.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - } - ], - "name": "calculateSwapFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dy", - "type": "uint256" - } - ], - "name": "calculateSwapOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "calculateSwapOutFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - }, - { - "internalType": "address", - "name": "lpTokenTargetAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "swapStorage", - "outputs": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 11012525 - }, - "SwapAdminFacet": { - "address": "0x13DbE4dD4D68b46E56ec8d1bf61890f85dEc25c7", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939923 - }, - "SwapAdminFacetStaging": { - "address": "0x0645265e254CaEb175d75890259db3696E7A81eD", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982175 - }, - "SwapUtilsExternalStaging": { - "address": "0x3AB96860468f7fEF23873491fA8c166Ce53c4617", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - } - ], - "name": "getD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "preciseA", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - } - ], - "name": "getY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "d", - "type": "uint256" - } - ], - "name": "getYD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "blockNumber": 11012523 - }, - "TestAdopted": { - "address": "0x08cf3f03d9FC58C97D2E209894594a2877Ef31ab", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 11012518 - }, - "TestERC20": { - "address": "0xb30ca61fD2B395EF1b58Eb0d1d6D40e439361e92", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 11012515 - }, - "TestWETH": { - "address": "0x38aC6eEd58c75D21C8F5c1bab636B7Aa23529652", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 11012520 - }, - "TokenFacet": { - "address": "0x971aB5F9854196085c28d5dD40d6536dd30A99a0", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12940046 - }, - "TokenFacetStaging": { - "address": "0xa05eF29e9aC8C75c530c2795Fa6A800e188dE0a9", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10982149 - }, - "Unwrapper": { - "address": "0x8Ef3E1300857FDF616dfE2fcBced4ac6a61Fe774", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "wrapper", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "WrongAsset", - "type": "event" - }, - { - "inputs": [], - "name": "CONNEXT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WRAPPER", - "outputs": [ - { - "internalType": "contract IWrapper", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "sweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "unwrapAndSweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "name": "xReceive", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 12940222 - }, - "UpgradeBeaconController": { - "address": "0xd1Efe1242D9Bb929DD0F671dBea04dEE6c4fb9E9", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 12939897 - }, - "UpgradeBeaconControllerStaging": { - "address": "0x48aD5c6930Df1Ce8768048785AdF3b7003778bcF", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 10981423 - }, - "WatcherManager": { - "address": "0x2d78D06fA823d879bBAd3d8332Bf0E6833cF4a2f", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 12939894 - }, - "WatcherManagerStaging": { - "address": "0xd2ceB2a4D219438C3850CeA4E643FebB66116F96", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 10981417 - }, - "_DefaultDiamondERC165Init": { - "address": "0x8533004Ecb90151cD821dc2Fafb78797d8fdd085", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "interfaceIds", - "type": "bytes4[]" - }, - { - "internalType": "bytes4[]", - "name": "interfaceIdsToRemove", - "type": "bytes4[]" - } - ], - "name": "setERC165", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 11012511 - }, - "_DefaultDiamondLoupeFacet": { - "address": "0x43Add7f520Cc35e5DbF04f5426a03EA8Ca052c98", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 11012470 - } - } - } - ], - "59140": [ - { - "name": "59140_production_fork", - "chainId": "59140", - "contracts": { - "BigBroERC20": { - "address": "0xa959bBC102B6f46256095AA1e1E74EF3B1446f07", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 158687 - }, - "BridgeFacet": { - "address": "0xac161cf406ff3c70f0bbdae9ca37076d1c85af4b", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 322230 - }, - "BridgeFacetStaging": { - "address": "0x0e93f1e9a44AF236186a8cBCdeb22e2E6564856c", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "Connext": { - "address": "0xfdb6B853C1945Dbffe78A3091BeBB9A928234fA3", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 88565 - }, - "ConnextStaging": { - "address": "0x8D550Be83Ba7dc8c1e0873173517ada77e57f3be", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 86389 - }, - "ConnextStaging_DiamondProxy": { - "address": "0x8D550Be83Ba7dc8c1e0873173517ada77e57f3be", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 86389 - }, - "Connext_DiamondProxy": { - "address": "0xfdb6B853C1945Dbffe78A3091BeBB9A928234fA3", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 88565 - }, - "ConsensysSpokeConnector": { - "address": "0x8ab0903e4E6aE8BD82FB88D409A8d9d940299bb5", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "messages", - "outputs": [ - { - "internalType": "enum SpokeConnector.MessageStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 88564 - }, - "ConsensysSpokeConnectorStaging": { - "address": "0x2133694eB11f132971A81D1483C56E0b859830C3", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "messages", - "outputs": [ - { - "internalType": "enum SpokeConnector.MessageStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 87179 - }, - "DiamondCutFacet": { - "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondCutFacetStaging": { - "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondInit": { - "address": "0x44e799f47A5599f5c9158d1F2457E30A6D77aDb4", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondInitStaging": { - "address": "0x44e799f47A5599f5c9158d1F2457E30A6D77aDb4", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "InboxFacet": { - "address": "0x5Ccd25372A41eeB3D4E5353879Bb28213dF5a295", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "InboxFacetStaging": { - "address": "0x5Ccd25372A41eeB3D4E5353879Bb28213dF5a295", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "LPToken": { - "address": "0xD5a12c3a6cBb420CFB04A863874A5893E92618cd", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "initialize", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 86387 - }, - "MerkleTreeManager": { - "address": "0x4B9e2915c2C9cBe215641E7AC650024567F760d8", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 88561 - }, - "MerkleTreeManagerStaging": { - "address": "0x541ba08aFFe32a25Cac9D43610691C81E19B2154", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 86383 - }, - "MerkleTreeManagerUpgradeBeacon": { - "address": "0xA8A3346f57F50dF37186fB67c93455300e1F6D82", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 88562 - }, - "MerkleTreeManagerUpgradeBeaconProxy": { - "address": "0x32f797366D01F374CA2382130c3A32D31fe6b870", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 88563 - }, - "MerkleTreeManagerUpgradeBeaconProxyStaging": { - "address": "0x95421bC5Cc65803A1675724d801574453EDCD6EB", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 86385 - }, - "MerkleTreeManagerUpgradeBeaconStaging": { - "address": "0x233585F91CBee5934e142934ce62e04503470541", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 86384 - }, - "MultiSend": { - "address": "0x8a3E48fD59E201E342D913092e508E539E14674A", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 86394 - }, - "PortalFacet": { - "address": "0x7993Bb17D8D8A0676Cc1527f8b4CE52A2B490352", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "PortalFacetStaging": { - "address": "0x7993Bb17D8D8A0676Cc1527f8b4CE52A2B490352", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "ProposedOwnableFacet": { - "address": "0x086B5A16D7Bd6B2955fCC7d5F9AA2a1544b67e0d", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "ProposedOwnableFacetStaging": { - "address": "0x086B5A16D7Bd6B2955fCC7d5F9AA2a1544b67e0d", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerFacet": { - "address": "0xcCb64fDf1c0Cc1aac1C39E5968E82f89c1B8C769", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerFacetStaging": { - "address": "0xcCb64fDf1c0Cc1aac1C39E5968E82f89c1B8C769", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerProxy": { - "address": "0xc4804757EDCB9a4E37dcda48b888FC293d7d9b3F", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - }, - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 88566 - }, - "RelayerProxyStaging": { - "address": "0x455AF009731d078dB47917E57AA1024f624368fF", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - }, - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 87180 - }, - "RoutersFacet": { - "address": "0xBe8D8Ac9a44fBa6cb7A7E02c1E6576E06C7da72D", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RoutersFacetStaging": { - "address": "0xBe8D8Ac9a44fBa6cb7A7E02c1E6576E06C7da72D", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "StableSwapFacet": { - "address": "0x9AB5F562Dc2aCcCd1b80d6564B770786e38f0686", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "StableSwapFacetStaging": { - "address": "0x9AB5F562Dc2aCcCd1b80d6564B770786e38f0686", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "SwapAdminFacet": { - "address": "0x6369F971fd1f1f230B8584151Ed7747FF710Cc68", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "SwapAdminFacetStaging": { - "address": "0x6369F971fd1f1f230B8584151Ed7747FF710Cc68", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "TestAdopted": { - "address": "0x4078f0C096157A53A18F68cD9C3F214ca0FFa7ae", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 86392 - }, - "TestERC20": { - "address": "0xB706319D37b945727E71ae0d4353699d19112576", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 86391 - }, - "TestWETH": { - "address": "0xb22B0A03dD71e350E1f482E9755481BE112374B7", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 86393 - }, - "TokenFacet": { - "address": "0xaBF282c88DeD3e386701a322e76456c062468Ac2", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 880650 - }, - "TokenFacetStaging": { - "address": "0xe37d4F73ef1C85dEf2174A394f17Ac65DD3cBB81", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "Unwrapper": { - "address": "0x2Eee7cB087c0430e40991f7E37De44Ec248a9F45", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "wrapper", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "WrongAsset", - "type": "event" - }, - { - "inputs": [], - "name": "CONNEXT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WRAPPER", - "outputs": [ - { - "internalType": "contract IWrapper", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "sweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "unwrapAndSweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "name": "xReceive", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 158686 - }, - "UpgradeBeaconController": { - "address": "0xc2C8f06a5a9519331b6180e8f3Ece5f82B5faA83", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 88560 - }, - "UpgradeBeaconControllerStaging": { - "address": "0x29E81453AAe28A63aE12c7ED7b3F8BC16629A4Fd", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 86382 - }, - "WatcherManager": { - "address": "0x6dC42a10F89Da5dAE486De606B1Dc4d8C5Ed1bfE", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 88559 - }, - "WatcherManagerStaging": { - "address": "0xEDeF10766Fc7499f4A138bC84965462c5b4A9f11", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 86381 - }, - "_DefaultDiamondERC165Init": { - "address": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "interfaceIds", - "type": "bytes4[]" - }, - { - "internalType": "bytes4[]", - "name": "interfaceIdsToRemove", - "type": "bytes4[]" - } - ], - "name": "setERC165", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "_DefaultDiamondLoupeFacet": { - "address": "0xCF790788Ef1DA81d555cEC33F04F7e9E13DCae11", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 0 - } - } - } - ], - "80001": [ - { - "name": "80001_production_fork", - "chainId": "80001", - "contracts": { - "BigBroERC20": { - "address": "0x4382968E36D3472D3Af6B085bF95E7521083721F", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29722054 - }, - "BridgeFacet": { - "address": "0x1b93ee4A5B343982efda8772317F0136C3418d38", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 33483947 - }, - "BridgeFacetStaging": { - "address": "0x7af0E443d94d923B7DAc093E46BD0D4e75626E2e", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 32911066 - }, - "Connext": { - "address": "0x2334937846Ab2A3FCE747b32587e1A1A2f6EEC5a", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29956478 - }, - "ConnextStaging": { - "address": "0x88F527c8Cb7282e93796c1559949570Da6cd671D", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_relayerFeeAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29883621 - }, - "ConnextStaging_DiamondProxy": { - "address": "0x88F527c8Cb7282e93796c1559949570Da6cd671D", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 29883621 - }, - "Connext_DiamondProxy": { - "address": "0x2334937846Ab2A3FCE747b32587e1A1A2f6EEC5a", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_contractOwner", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "initContract", - "type": "address" - }, - { - "internalType": "bytes", - "name": "initData", - "type": "bytes" - } - ], - "internalType": "struct ConnextDiamond.Initialization[]", - "name": "_initializations", - "type": "tuple[]" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addRemote_invalidRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__addSequencer_invalidSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_noRelayerVault", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__bumpTransfer_valueIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__excecute_insufficientGas", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__executePortalTransfer_insufficientAmountWithdrawn", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_badFastLiquidityStatus", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_externalCallFailed", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidRouterSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_invalidSequencerSignature", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_maxRoutersExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notApprovedForPortals", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_notSupportedSequencer", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_unapprovedSender", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__execute_wrongDomain", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceReceiveLocal_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__forceUpdateSlippage_notDestination", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__mustHaveRemote_destinationNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__onlyDelegate_notDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__removeSequencer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__setXAppConnectionManager_domainsDontMatch", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_emptyTo", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_invalidSlippage", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet__xcall_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BridgeFacet_xcall__emptyLocalAsset", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "AavePortalMintUnbacked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct ExecuteArgs", - "name": "args", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Executed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "ExternalCalldataExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "name": "ForceReceiveLocal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "remote", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RemoteAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SequencerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - } - ], - "name": "SlippageUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "increase", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "TransferRelayerFeesIncreased", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "XAppConnectionManagerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "indexed": false, - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "messageBody", - "type": "bytes" - } - ], - "name": "XCalled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "addSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "approvedSequencers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "bumpTransfer", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "domain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_router", - "type": "bytes32" - } - ], - "name": "enrollRemoteRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - } - ], - "name": "forceReceiveLocal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - } - ], - "name": "forceUpdateSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "nonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "remote", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sequencer", - "type": "address" - } - ], - "name": "removeSequencer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "routedTransfers", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - } - ], - "name": "setXAppConnectionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "transferStatus", - "outputs": [ - { - "internalType": "enum DestinationTransferStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "xAppConnectionManager", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcall", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destination", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippage", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "_callData", - "type": "bytes" - } - ], - "name": "xcallIntoLocal", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 29956478 - }, - "DiamondCutFacet": { - "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondCutFacetStaging": { - "address": "0x324c5834cD3bD19c4991F4fC5b3a0Ff5257a692b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "DiamondCutProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "indexed": false, - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "indexed": false, - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "DiamondCutRescinded", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "diamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "getAcceptanceTime", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "proposeDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "enum IDiamondCut.FacetCutAction", - "name": "action", - "type": "uint8" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondCut.FacetCut[]", - "name": "_diamondCut", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "_init", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_calldata", - "type": "bytes" - } - ], - "name": "rescindDiamondCut", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondInit": { - "address": "0x44e799f47A5599f5c9158d1F2457E30A6D77aDb4", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "DiamondInitStaging": { - "address": "0x44e799f47A5599f5c9158d1F2457E30A6D77aDb4", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "DiamondInit__init_domainsDontMatch", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_xAppConnectionManager", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_acceptanceDelay", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_lpTokenTargetAddress", - "type": "address" - } - ], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "InboxFacet": { - "address": "0x5Ccd25372A41eeB3D4E5353879Bb28213dF5a295", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "InboxFacetStaging": { - "address": "0x5Ccd25372A41eeB3D4E5353879Bb28213dF5a295", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__handle_notTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyRemoteRouter_notRemote", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__onlyReplica_notReplica", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_alreadyReconciled", - "type": "error" - }, - { - "inputs": [], - "name": "InboxFacet__reconcile_noPortalRouter", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "TypedMemView__assertType_typeAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__assertValid_validityAssertionFailed", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "originAndNonce", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "liquidityProvider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Receive", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Reconciled", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_origin", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_nonce", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "handle", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "LPToken": { - "address": "0xcad5f98194A6325e213412d4122b58Da883D3aA7", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - } - ], - "name": "initialize", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29767878 - }, - "MerkleTreeManager": { - "address": "0x856B27CD8EC42392DD332Fb50dAd855172673383", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 29956459 - }, - "MerkleTreeManagerStaging": { - "address": "0x1A512894BCF989Db079971062b20374f1D5958Aa", - "abi": [ - { - "inputs": [], - "name": "MerkleLib__insert_treeIsFull", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_alreadyArborist", - "type": "error" - }, - { - "inputs": [], - "name": "MerkleTreeManager__setArborist_zeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - } - ], - "name": "ArboristUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "LeafInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "count", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "LeavesInserted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "arborist", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "branch", - "outputs": [ - { - "internalType": "bytes32[32]", - "name": "", - "type": "bytes32[32]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "count", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_arborist", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "leaves", - "type": "bytes32[]" - } - ], - "name": "insert", - "outputs": [ - { - "internalType": "bytes32", - "name": "_root", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_count", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "root", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rootAndCount", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newArborist", - "type": "address" - } - ], - "name": "setArborist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tree", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 29883599 - }, - "MerkleTreeManagerUpgradeBeacon": { - "address": "0xD1E8A594D13416490112Cb28d580959A5778d660", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 29956462 - }, - "MerkleTreeManagerUpgradeBeaconProxy": { - "address": "0xEf8317C06643aDDeC80441ce5ae184aa207a94fD", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 29956465 - }, - "MerkleTreeManagerUpgradeBeaconProxyStaging": { - "address": "0x1572B96bFB7A49FB27206bCe58BB407AC3d31162", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_upgradeBeacon", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_initializationCalldata", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 29883606 - }, - "MerkleTreeManagerUpgradeBeaconStaging": { - "address": "0x37128a7a43Db49AFE754c3Ac210AFd22B6CcB388", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_initialImplementation", - "type": "address" - }, - { - "internalType": "address", - "name": "_controller", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgrade", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - } - ], - "blockNumber": 29883602 - }, - "MultiSend": { - "address": "0x51Ab1aB233B4936D426F6150d1c2A1180a6481DC", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "transactions", - "type": "bytes" - } - ], - "name": "multiSend", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "blockNumber": 29981215 - }, - "PolygonSpokeConnector": { - "address": "0x8d2690fDc417a231d6D919F9cb1f2fB317B36af5", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "fxChild", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxRootTunnel", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "messages", - "outputs": [ - { - "internalType": "enum SpokeConnector.MessageStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "stateId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "rootMessageSender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 29956468 - }, - "PolygonSpokeConnectorStaging": { - "address": "0xF0BDAB8B69F14c1d91B834075235de7FFa8A1918", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_mirrorDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_amb", - "type": "address" - }, - { - "internalType": "address", - "name": "_rootManager", - "type": "address" - }, - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_processGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_reserveGas", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_merkle", - "type": "address" - }, - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "Connector__processMessage_notUsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "RateLimited__rateLimited_messageSendRateExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__index_indexMoreThan32Bytes", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "loc", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "len", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "slice", - "type": "uint256" - } - ], - "name": "TypedMemView__index_overrun", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_identityOOG", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_invalidPointer", - "type": "error" - }, - { - "inputs": [], - "name": "TypedMemView__unsafeCopyTo_nullPointer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - } - ], - "name": "AggregateRootVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "DelayBlocksUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "root", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "Dispatch", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageProcessed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "aggregateRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "aggregateIndex", - "type": "uint256" - } - ], - "name": "MessageProven", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "encodedData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MessageSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "current", - "type": "address" - } - ], - "name": "MirrorConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "mirrorDomain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "amb", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "rootManager", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "mirrorConnector", - "type": "address" - } - ], - "name": "NewConnector", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leaf", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ], - "name": "Process", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRateLimit", - "type": "uint256" - } - ], - "name": "SendRateLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SenderRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcherManager", - "type": "address" - } - ], - "name": "WatcherManagerChanged", - "type": "event" - }, - { - "inputs": [], - "name": "AMB", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MERKLE", - "outputs": [ - { - "internalType": "contract MerkleTreeManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MIRROR_DOMAIN", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PROCESS_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "RESERVE_GAS", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROOT_MANAGER", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "addSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowlistedSenders", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delayBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_destinationDomain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_recipientAddress", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_messageBody", - "type": "bytes" - } - ], - "name": "dispatch", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "fxChild", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fxRootTunnel", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "home", - "outputs": [ - { - "internalType": "contract IOutbox", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_potentialReplica", - "type": "address" - } - ], - "name": "isReplica", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastSentBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "localDomain", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "messages", - "outputs": [ - { - "internalType": "enum SpokeConnector.MessageStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mirrorConnector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "outboundRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "pendingAggregateRoots", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "name": "processMessage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "stateId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "rootMessageSender", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "processMessageFromRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct SpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenAggregateRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "provenMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rateLimitBlocks", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_fraudulentRoot", - "type": "bytes32" - } - ], - "name": "removePendingAggregateRoot", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "removeSender", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "sentMessageRoots", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_delayBlocks", - "type": "uint256" - } - ], - "name": "setDelayBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_mirrorConnector", - "type": "address" - } - ], - "name": "setMirrorConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_rateLimit", - "type": "uint256" - } - ], - "name": "setRateLimitBlocks", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcherManager", - "type": "address" - } - ], - "name": "setWatcherManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_expected", - "type": "address" - } - ], - "name": "verifySender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "watcherManager", - "outputs": [ - { - "internalType": "contract WatcherManager", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - } - ], - "name": "withdrawFunds", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 29939453 - }, - "PortalFacet": { - "address": "0x7993Bb17D8D8A0676Cc1527f8b4CE52A2B490352", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "PortalFacetStaging": { - "address": "0x7993Bb17D8D8A0676Cc1527f8b4CE52A2B490352", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__getTokenIndexFromStableSwapPool_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_invalidAsset", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortalFor_zeroAmount", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_assetNotApproved", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__repayAavePortal_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "PortalFacet__setAavePortalFee_invalidFee", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePoolUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "updated", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AavePortalRepayment", - "type": "event" - }, - { - "inputs": [], - "name": "aavePool", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aavePortalFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_transferId", - "type": "bytes32" - } - ], - "name": "getAavePortalFeeDebt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxIn", - "type": "uint256" - } - ], - "name": "repayAavePortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_portalAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_backingAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_feeAmount", - "type": "uint256" - } - ], - "name": "repayAavePortalFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_aavePool", - "type": "address" - } - ], - "name": "setAavePool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_aavePortalFeeNumerator", - "type": "uint256" - } - ], - "name": "setAavePortalFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29903447 - }, - "ProposedOwnableFacet": { - "address": "0x086B5A16D7Bd6B2955fCC7d5F9AA2a1544b67e0d", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "ProposedOwnableFacetStaging": { - "address": "0x086B5A16D7Bd6B2955fCC7d5F9AA2a1544b67e0d", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__acceptProposedOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleAdmin_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleRouter_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__assignRoleWatcher_invalidInput", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__delayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeAssetAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__proposeRouterAllowlistRemoval_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeAssetAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__removeRouterAllowlist_noProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnableFacet__revokeRole_invalidInput", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "admin", - "type": "address" - } - ], - "name": "AssignRoleAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "AssignRoleRouter", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "AssignRoleWatcher", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "revokedAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum Role", - "name": "revokedRole", - "type": "uint8" - } - ], - "name": "RevokeRole", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "RouterAllowlistRemovalProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "renounced", - "type": "bool" - } - ], - "name": "RouterAllowlistRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "assignRoleAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "assignRoleRouterAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "assignRoleWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposeRouterAllowlistRemoval", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_role", - "type": "address" - } - ], - "name": "queryRole", - "outputs": [ - { - "internalType": "enum Role", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "removeRouterAllowlist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_revoke", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistRemoved", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "routerAllowlistTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerFacet": { - "address": "0xcCb64fDf1c0Cc1aac1C39E5968E82f89c1B8C769", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerFacetStaging": { - "address": "0xcCb64fDf1c0Cc1aac1C39E5968E82f89c1B8C769", - "abi": [ - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__addRelayer_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__removeRelayer_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RelayerFacet__setRelayerFeeVault_invalidRelayerFeeVault", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newVault", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerFeeVaultUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "approvedRelayers", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFeeVault", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayerFeeVault", - "type": "address" - } - ], - "name": "setRelayerFeeVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RelayerProxy": { - "address": "0x2730AC87C162894fa723b4553Ed396C484b80dE2", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - }, - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 29956481 - }, - "RelayerProxyStaging": { - "address": "0x9C51fab4E8d4590239E1f84ded5c538426238F3F", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - }, - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - }, - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - }, - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "ConnextChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "FeeCollectorChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsDeducted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "name": "FundsReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "GelatoRelayerChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - } - ], - "name": "RelayerRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updated", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "previous", - "type": "address" - } - ], - "name": "SpokeConnectorChanged", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "addRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowedRelayer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connext", - "outputs": [ - { - "internalType": "contract IConnext", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "originDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "destinationDomain", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "canonicalDomain", - "type": "uint32" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "bool", - "name": "receiveLocal", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "slippage", - "type": "uint256" - }, - { - "internalType": "address", - "name": "originSender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bridgedAmt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "normalizedIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - } - ], - "internalType": "struct TransferInfo", - "name": "params", - "type": "tuple" - }, - { - "internalType": "address[]", - "name": "routers", - "type": "address[]" - }, - { - "internalType": "bytes[]", - "name": "routerSignatures", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "sequencer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "sequencerSignature", - "type": "bytes" - } - ], - "internalType": "struct ExecuteArgs", - "name": "_args", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "bytes32", - "name": "transferId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gelatoRelayer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes32[32]", - "name": "path", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "internalType": "struct ISpokeConnector.Proof[]", - "name": "_proofs", - "type": "tuple[]" - }, - { - "internalType": "bytes32", - "name": "_aggregateRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32[32]", - "name": "_aggregatePath", - "type": "bytes32[32]" - }, - { - "internalType": "uint256", - "name": "_aggregateIndex", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - } - ], - "name": "proveAndProcess", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_relayer", - "type": "address" - } - ], - "name": "removeRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_encodedData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_messageFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_relayerFee", - "type": "uint256" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_connext", - "type": "address" - } - ], - "name": "setConnext", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "setFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_gelatoRelayer", - "type": "address" - } - ], - "name": "setGelatoRelayer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spokeConnector", - "type": "address" - } - ], - "name": "setSpokeConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "spokeConnector", - "outputs": [ - { - "internalType": "contract ISpokeConnector", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 29939468 - }, - "RoutersFacet": { - "address": "0xBe8D8Ac9a44fBa6cb7A7E02c1E6576E06C7da72D", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "RoutersFacetStaging": { - "address": "0xBe8D8Ac9a44fBa6cb7A7E02c1E6576E06C7da72D", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_badCaller", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__acceptProposedRouterOwner_notElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_capReached", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__addLiquidityForRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_alreadyApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouterForPortal_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__approveRouter_routerEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__initializeRouter_configNotEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__onlyRouterOwner_notRouterOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_badRouter", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__proposeRouterOwner_notNewOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidityFor_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_amountIsZero", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_insufficientFunds", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__removeRouterLiquidity_recipientEmpty", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooLarge", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setLiquidityFeeNumerator_tooSmall", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setMaxRoutersPerTransfer_invalidMaxRoutersPerTransfer", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterOwner_noChange", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__setRouterRecipient_notNewRecipient", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouterForPortal_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "RoutersFacet__unapproveRouter_routerEmpty", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "liquidityFeeNumerator", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityFeeNumeratorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxRoutersPerTransfer", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "MaxRoutersPerTransferUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterApprovedForPortal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - } - ], - "name": "RouterInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "local", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterLiquidityRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "RouterOwnerAccepted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevProposed", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newProposed", - "type": "address" - } - ], - "name": "RouterOwnerProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "prevRecipient", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newRecipient", - "type": "address" - } - ], - "name": "RouterRecipientSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "router", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RouterUnapprovedForPortal", - "type": "event" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "LIQUIDITY_FEE_NUMERATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "acceptProposedRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "name": "addRouterLiquidity", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_local", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "addRouterLiquidityFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "approveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getProposedRouterOwnerTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApproval", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterApprovalForPortal", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "getRouterRecipient", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "initializeRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "maxRoutersPerTransfer", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_proposed", - "type": "address" - } - ], - "name": "proposeRouterOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "removeRouterLiquidity", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "removeRouterLiquidityFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "routerBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_numerator", - "type": "uint256" - } - ], - "name": "setLiquidityFeeNumerator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newMaxRouters", - "type": "uint256" - } - ], - "name": "setMaxRoutersPerTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - } - ], - "name": "setRouterRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_router", - "type": "address" - } - ], - "name": "unapproveRouterForPortal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "StableSwap": { - "address": "0x5dE2B1262D14baa523D3bFd03a70595475413459", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newWithdrawFee", - "type": "uint256" - } - ], - "name": "NewWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - } - ], - "indexed": false, - "internalType": "struct SwapUtilsExternal.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - } - ], - "name": "calculateSwapFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dy", - "type": "uint256" - } - ], - "name": "calculateSwapOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "calculateSwapOutFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - }, - { - "internalType": "address", - "name": "lpTokenTargetAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "swapStorage", - "outputs": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29296647 - }, - "StableSwapFacet": { - "address": "0x9AB5F562Dc2aCcCd1b80d6564B770786e38f0686", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "StableSwapFacetStaging": { - "address": "0x9AB5F562Dc2aCcCd1b80d6564B770786e38f0686", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__deadlineCheck_deadlineNotMet", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenBalance_indexOutOfRange", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapTokenIndex_notExist", - "type": "error" - }, - { - "inputs": [], - "name": "StableSwapFacet__getSwapToken_outOfRange", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addSwapLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateSwapTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getSwapAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapLPToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapStorage", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "internalType": "struct SwapUtils.Swap", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getSwapTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getSwapTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "getSwapVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeSwapLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "StableSwapStaging": { - "address": "0x51Ce3D4393395d44Fde89D8f5f1Dca73296E42b6", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newWithdrawFee", - "type": "uint256" - } - ], - "name": "NewWithdrawFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - } - ], - "indexed": false, - "internalType": "struct SwapUtilsExternal.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "minToMint", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "addLiquidity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "calculateRemoveLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - } - ], - "name": "calculateRemoveLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "availableTokenAmount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - } - ], - "name": "calculateSwap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - } - ], - "name": "calculateSwapFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dy", - "type": "uint256" - } - ], - "name": "calculateSwapOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "calculateSwapOutFromAddress", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "deposit", - "type": "bool" - } - ], - "name": "calculateTokenAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getA", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAPrecise", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getAdminBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getToken", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "index", - "type": "uint8" - } - ], - "name": "getTokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "getTokenIndex", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVirtualPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - }, - { - "internalType": "address", - "name": "lpTokenTargetAddress", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "minAmounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidity", - "outputs": [ - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "amounts", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "maxBurnAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityImbalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "minAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "removeLiquidityOneToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "dx", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDy", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swap", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "minAmountOut", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExact", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - }, - { - "internalType": "address", - "name": "assetIn", - "type": "address" - }, - { - "internalType": "address", - "name": "assetOut", - "type": "address" - }, - { - "internalType": "uint256", - "name": "maxAmountIn", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - } - ], - "name": "swapExactOut", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "swapStorage", - "outputs": [ - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29896726 - }, - "SwapAdminFacet": { - "address": "0x6369F971fd1f1f230B8584151Ed7747FF710Cc68", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "SwapAdminFacetStaging": { - "address": "0x6369F971fd1f1f230B8584151Ed7747FF710Cc68", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_alreadyDisabled", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__disableSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_aExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_adminFeeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_alreadyInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_decimalsMismatch", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_duplicateTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_failedInitLpTokenClone", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_feeExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_invalidPooledTokens", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_tokenDecimalsExceedMax", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__initializeSwap_zeroTokenAddress", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notDisabledPool", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__removeSwap_notInitialized", - "type": "error" - }, - { - "inputs": [], - "name": "SwapAdminFacet__updateLpTokenTarget_invalidNewAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AdminFeesWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LPTokenTargetUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "RampAStopped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapDisabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "initialA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "initialATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureATime", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "swapFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "adminFee", - "type": "uint256" - }, - { - "internalType": "contract LPToken", - "name": "lpToken", - "type": "address" - }, - { - "internalType": "contract IERC20[]", - "name": "pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "tokenPrecisionMultipliers", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "adminFees", - "type": "uint256[]" - }, - { - "internalType": "bool", - "name": "disabled", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "removeTime", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct SwapUtils.Swap", - "name": "swap", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapInitialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "SwapRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "disableSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "contract IERC20[]", - "name": "_pooledTokens", - "type": "address[]" - }, - { - "internalType": "uint8[]", - "name": "decimals", - "type": "uint8[]" - }, - { - "internalType": "string", - "name": "lpTokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "lpTokenSymbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_a", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_fee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_adminFee", - "type": "uint256" - } - ], - "name": "initializeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "isDisabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lpTokenTargetAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "futureA", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "rampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "removeSwap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "setSwapAdminFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "setSwapFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "stopRampA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAddress", - "type": "address" - } - ], - "name": "updateLpTokenTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - } - ], - "name": "withdrawSwapAdminFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "SwapUtilsExternal": { - "address": "0x4cadD5f06ae9009C1a7099109B50a9EA8f578607", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - } - ], - "name": "getD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "preciseA", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - } - ], - "name": "getY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "d", - "type": "uint256" - } - ], - "name": "getYD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "blockNumber": 29296645 - }, - "SwapUtilsExternalStaging": { - "address": "0x8ea8B86AE62060B1F16608aAe1Ec8fC4030d7fA8", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_feeOnTransferNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleIncomingAsset_nativeAssetNotSupported", - "type": "error" - }, - { - "inputs": [], - "name": "AssetLogic__handleOutgoingAsset_notNative", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "AddLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newAdminFee", - "type": "uint256" - } - ], - "name": "NewAdminFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "newSwapFee", - "type": "uint256" - } - ], - "name": "NewSwapFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "initialTime", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "futureTime", - "type": "uint256" - } - ], - "name": "RampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidity", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "tokenAmounts", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "invariant", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - } - ], - "name": "RemoveLiquidityImbalance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "provider", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "lpTokenSupply", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "boughtId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - } - ], - "name": "RemoveLiquidityOne", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "currentA", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "time", - "type": "uint256" - } - ], - "name": "StopRampA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensSold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokensBought", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "soldId", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "boughtId", - "type": "uint128" - } - ], - "name": "TokenSwap", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - } - ], - "name": "getD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "preciseA", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndexFrom", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "tokenIndexTo", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "x", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - } - ], - "name": "getY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "a", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "tokenIndex", - "type": "uint8" - }, - { - "internalType": "uint256[]", - "name": "xp", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "d", - "type": "uint256" - } - ], - "name": "getYD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - } - ], - "blockNumber": 29896721 - }, - "TestAdopted": { - "address": "0xbD34782B492D7B19F3BEC49Ce015197f85f814e4", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "_v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "_r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29296643 - }, - "TestERC20": { - "address": "0xeDb95D8037f769B72AAab41deeC92903A98C9E16", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "detailsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "_newDecimals", - "type": "uint8" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_detailsHash", - "type": "bytes32" - } - ], - "name": "setDetailsHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 28067931 - }, - "TestWETH": { - "address": "0x1E5341E4b7ed5D0680d9066aac0396F0b1bD1E69", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "detailsHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_newName", - "type": "string" - }, - { - "internalType": "string", - "name": "_newSymbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "_newDecimals", - "type": "uint8" - } - ], - "name": "setDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_detailsHash", - "type": "bytes32" - } - ], - "name": "setDetailsHash", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 28067933 - }, - "TokenFacet": { - "address": "0xe37d4F73ef1C85dEf2174A394f17Ac65DD3cBB81", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "TokenFacetStaging": { - "address": "0xe37d4F73ef1C85dEf2174A394f17Ac65DD3cBB81", - "abi": [ - { - "inputs": [], - "name": "AssetLogic__getConfig_notRegistered", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getAdoptedAsset_assetNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__getApprovedCanonicalId_notAllowlisted", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__nonXCallReentrant_reentrantCall", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrAdmin_notOwnerOrAdmin", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrRouter_notOwnerOrRouter", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwnerOrWatcher_notOwnerOrWatcher", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "BaseConnextFacet__whenNotPaused_paused", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_alreadyAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badBurn", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__addAssetId_badMint", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__enrollAdoptedAndLocalAssets_emptyCanonical", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_invalidParams", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_notAdded", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__removeAssetId_remainsCustodied", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setLiquidityCap_notCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_invalidRepresentation", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAssetWithDeployedRepresentation_onCanonicalDomain", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_invalidCanonicalConfiguration", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__setupAsset_representationListed", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_localNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_notApproved", - "type": "error" - }, - { - "inputs": [], - "name": "TokenFacet__updateDetails_onlyRemote", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "adoptedAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "localAsset", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "AssetRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cap", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "LiquidityCapUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "key", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "canonicalId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "swapPool", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "StableSwapAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "representation", - "type": "address" - } - ], - "name": "TokenDeployed", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "addStableSwapPool", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_adopted", - "type": "address" - } - ], - "name": "adoptedToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "adoptedToLocalExternalPools", - "outputs": [ - { - "internalType": "contract IStableSwap", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "approvedAssets", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToAdopted", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - } - ], - "name": "canonicalToRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - } - ], - "name": "getCustodiedAmount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_id", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "_domain", - "type": "uint32" - } - ], - "name": "getLocalAndAdoptedToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_candidate", - "type": "address" - } - ], - "name": "getTokenId", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_key", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "removeAssetId", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_representation", - "type": "address" - } - ], - "name": "representationToCanonical", - "outputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "_canonicalDecimals", - "type": "uint8" - }, - { - "internalType": "string", - "name": "_representationName", - "type": "string" - }, - { - "internalType": "string", - "name": "_representationSymbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_cap", - "type": "uint256" - } - ], - "name": "setupAsset", - "outputs": [ - { - "internalType": "address", - "name": "_local", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_representation", - "type": "address" - }, - { - "internalType": "address", - "name": "_adoptedAssetId", - "type": "address" - }, - { - "internalType": "address", - "name": "_stableSwapPool", - "type": "address" - } - ], - "name": "setupAssetWithDeployedRepresentation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "updateDetails", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "domain", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "id", - "type": "bytes32" - } - ], - "internalType": "struct TokenId", - "name": "_canonical", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "_updated", - "type": "uint256" - } - ], - "name": "updateLiquidityCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "Unwrapper": { - "address": "0x35e8c2d5F3277eb58aA573970434C8E7a88Da22A", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "connext", - "type": "address" - }, - { - "internalType": "address", - "name": "wrapper", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "FundsDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "WrongAsset", - "type": "event" - }, - { - "inputs": [], - "name": "CONNEXT", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WRAPPER", - "outputs": [ - { - "internalType": "contract IWrapper", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "sweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "unwrapAndSweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - } - ], - "name": "xReceive", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "blockNumber": 34924721 - }, - "UpgradeBeaconController": { - "address": "0x26ADee2A2fA9D1b9080912Fa9B5bF7DdB762c5C1", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29956455 - }, - "UpgradeBeaconControllerStaging": { - "address": "0x5248aacb2f568B6E9ce70e872815E564e8386F02", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 29883595 - }, - "WatcherManager": { - "address": "0xe8FB916347D854C7eacEf974e1CE35eC7df93838", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 29956451 - }, - "WatcherManagerStaging": { - "address": "0x87fcE24b0563F7Ed981101291C360b54FBFCB7e2", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyOwner_notOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__onlyProposed_notProposedOwner", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__ownershipDelayElapsed_delayNotElapsed", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__proposeNewOwner_noOwnershipChange", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_invalidProposal", - "type": "error" - }, - { - "inputs": [], - "name": "ProposedOwnable__renounceOwnership_noProposal", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "proposedOwner", - "type": "address" - } - ], - "name": "OwnershipProposed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "watcher", - "type": "address" - } - ], - "name": "WatcherRemoved", - "type": "event" - }, - { - "inputs": [], - "name": "acceptProposedOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "addWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isWatcher", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newlyProposed", - "type": "address" - } - ], - "name": "proposeNewOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposed", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_watcher", - "type": "address" - } - ], - "name": "removeWatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounced", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 29883590 - }, - "_DefaultDiamondERC165Init": { - "address": "0xe68d85348f227d2ebEE814C38918F8A2D7d9B603", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "interfaceIds", - "type": "bytes4[]" - }, - { - "internalType": "bytes4[]", - "name": "interfaceIdsToRemove", - "type": "bytes4[]" - } - ], - "name": "setERC165", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "blockNumber": 0 - }, - "_DefaultDiamondLoupeFacet": { - "address": "0xCF790788Ef1DA81d555cEC33F04F7e9E13DCae11", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_functionSelector", - "type": "bytes4" - } - ], - "name": "facetAddress", - "outputs": [ - { - "internalType": "address", - "name": "facetAddress_", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facetAddresses", - "outputs": [ - { - "internalType": "address[]", - "name": "facetAddresses_", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_facet", - "type": "address" - } - ], - "name": "facetFunctionSelectors", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "facetFunctionSelectors_", - "type": "bytes4[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "facets", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "facetAddress", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "functionSelectors", - "type": "bytes4[]" - } - ], - "internalType": "struct IDiamondLoupe.Facet[]", - "name": "facets_", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "blockNumber": 0 - } - } - } - ] -} \ No newline at end of file +{} \ No newline at end of file diff --git a/packages/deployments/contracts/src/cli/helpers/constants.ts b/packages/deployments/contracts/src/cli/helpers/constants.ts index 04a5fc1c20..9428c597b2 100644 --- a/packages/deployments/contracts/src/cli/helpers/constants.ts +++ b/packages/deployments/contracts/src/cli/helpers/constants.ts @@ -15,6 +15,7 @@ export const SUPPORTED_DOMAINS = { 1835101812, // Mantle 1836016741, // Mode 1935897199, // Scroll + 1718772088, // Fraxtal ], testnet: [ 1735353714, // goerli diff --git a/packages/deployments/contracts/src/cli/init/config/mainnet/production.ts b/packages/deployments/contracts/src/cli/init/config/mainnet/production.ts index b530f5c5fd..37406c548e 100644 --- a/packages/deployments/contracts/src/cli/init/config/mainnet/production.ts +++ b/packages/deployments/contracts/src/cli/init/config/mainnet/production.ts @@ -21,6 +21,7 @@ export const MAINNET_PRODUCTION_INIT_CONFIG: InitConfig = { "1835101812", // Mantle "1836016741", // Mode "1935897199", // Scroll + "1718772088", // Fraxtal ], // NOTE: ENSURE LPTOKEN AND BRIDGETOKEN NAMES ARE GENERATED CORRECTLY BASED // ON THE NAME GIVEN IN EACH ASSET ENTRY diff --git a/packages/deployments/contracts/src/cli/init/config/mainnet/staging.ts b/packages/deployments/contracts/src/cli/init/config/mainnet/staging.ts index f3a0583951..f429b0b4a3 100644 --- a/packages/deployments/contracts/src/cli/init/config/mainnet/staging.ts +++ b/packages/deployments/contracts/src/cli/init/config/mainnet/staging.ts @@ -19,6 +19,7 @@ export const MAINNET_STAGING_INIT_CONFIG: InitConfig = { "1835101812", // Mantle "1836016741", // Mode "1935897199", // Scroll + "1718772088", // Fraxtal ], // NOTE: ENSURE LPTOKEN AND BRIDGETOKEN NAMES ARE GENERATED CORRECTLY BASED // ON THE NAME GIVEN IN EACH ASSET ENTRY diff --git a/packages/deployments/contracts/src/cli/ownership/helpers/constants.ts b/packages/deployments/contracts/src/cli/ownership/helpers/constants.ts index 109ea29fd5..a146699800 100644 --- a/packages/deployments/contracts/src/cli/ownership/helpers/constants.ts +++ b/packages/deployments/contracts/src/cli/ownership/helpers/constants.ts @@ -39,6 +39,7 @@ export const PROTOCOL_ADMINS: AddressBook = { 2053862243: "0xc0e2a1249c12f3d1B33bb3D319eBa0197dFB0641", // zksync-era 1836016741: "0x1222165e4087304c60fC76Ed47Ab2887eD238108", // mode 1935897199: "0xdD247760618092f0F769E10Ad9f5c3e5B67E545e", // scroll + 1718772088: "0x9ae004E26427E7c54d3ad4870BeD0e66F0cafFD8", // fraxtal }, testnet: { 1735353714: "0xa2Ee8DCd2A8A3A54Cf37F6590E5108BbE502B006", // goerli diff --git a/packages/deployments/contracts/src/config.ts b/packages/deployments/contracts/src/config.ts index d175771245..42eac8e381 100644 --- a/packages/deployments/contracts/src/config.ts +++ b/packages/deployments/contracts/src/config.ts @@ -7,6 +7,7 @@ dotenvConfig(); export const SUPPORTED_CHAINS = { mainnet: [ 1, 10, 56, 250, 137, 100, 122, 1285, 9001, 42161, 43114, 1284, 59144, 8453, 1101, 1088, 324, 5000, 34443, 534352, + 252, ], testnet: [5, 280, 420, 59140, 80001, 421613, 84531, 195], }; @@ -474,4 +475,19 @@ export const hardhatNetworks = { }, }, }, + fraxtal: { + accounts: { mnemonic: mainnetMnemonic ?? mnemonic }, + chainId: 252, + url: urlOverride || process.env.FRAXTAL_PROVIDER_URL || "https://rpc.frax.com", + companionNetworks: { + hub: "mainnet", + }, + gasPrice: utils.parseUnits("1.5", "gwei").toNumber(), + verify: { + etherscan: { + apiKey: process.env.FRAXTAL_EXPLORER_API_KEY!, + apiUrl: "https://api.fraxscan.com/api", + }, + }, + }, }; diff --git a/packages/deployments/contracts/src/typechain-types/factories/contracts/core/connext/facets/BridgeFacet__factory.ts b/packages/deployments/contracts/src/typechain-types/factories/contracts/core/connext/facets/BridgeFacet__factory.ts index ff1cc29895..5e6e8a240f 100644 --- a/packages/deployments/contracts/src/typechain-types/factories/contracts/core/connext/facets/BridgeFacet__factory.ts +++ b/packages/deployments/contracts/src/typechain-types/factories/contracts/core/connext/facets/BridgeFacet__factory.ts @@ -1401,7 +1401,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50615188806100206000396000f3fe60806040526004361061011f5760003560e01c80636989ca7c116100a0578063affed0e011610064578063affed0e01461033e578063b49c53a714610353578063bfd7903014610373578063c2fb26a6146103b0578063cb8058ba146103d557600080fd5b80636989ca7c146102b85780638a336231146102d85780638aac16ba146102f857806391f5de791461030b57806393f18ac51461031e57600080fd5b806341bdc8b5116100e757806341bdc8b51461020a578063541267111461022a57806359efa1621461024a57806363e3e7d21461026a578063674dc9331461029857600080fd5b8063121cca3114610124578063159e041f146101615780631a8bc0e1146101aa5780632424401f146101d75780633339df96146101ec575b600080fd5b34801561013057600080fd5b5061014461013f3660046141b4565b6103f5565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016d57600080fd5b5061019a61017c3660046141f1565b6001600160a01b03166000908152601f602052604090205460ff1690565b6040519015158152602001610158565b3480156101b657600080fd5b506101ca6101c536600461420e565b610412565b6040516101589190614227565b6101ea6101e536600461420e565b61047e565b005b3480156101f857600080fd5b506020546001600160a01b0316610144565b34801561021657600080fd5b506101ea6102253660046141f1565b610507565b34801561023657600080fd5b506101ea61024536600461428d565b610664565b34801561025657600080fd5b506101ea6102653660046142d1565b610766565b34801561027657600080fd5b5061028a610285366004614309565b6107fb565b604051908152602001610158565b3480156102a457600080fd5b5061028a6102b3366004614384565b6109ba565b3480156102c457600080fd5b506101ea6102d33660046141f1565b610ae2565b3480156102e457600080fd5b506101ea6102f33660046141f1565b610bda565b61028a61030636600461442d565b610cf6565b61028a61031936600461442d565b610e1b565b34801561032a57600080fd5b5061028a610339366004614384565b610f2d565b34801561034a57600080fd5b5060035461028a565b34801561035f57600080fd5b506101ea61036e3660046144cd565b611041565b34801561037f57600080fd5b506103a361038e36600461420e565b60009081526008602052604090205460ff1690565b604051610158919061452d565b3480156103bc57600080fd5b5060045460405163ffffffff9091168152602001610158565b3480156103e157600080fd5b506101ea6103f0366004614540565b61115f565b63ffffffff81166000908152600f60205260408120545b92915050565b60008181526009602090815260409182902080548351818402810184019094528084526060939283018282801561047257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610454575b50505050509050919050565b601654600119016104a257604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156104d257604051633ee5b89360e01b815260040160405180910390fd5b346000036104f3576040516348e7dc3f60e01b815260040160405180910390fd5b6104ff8160003461122c565b506001601655565b336105106112d2565b6001600160a01b03161415801561054b575060033360009081526014602052604090205460ff166003811115610548576105486144f9565b14155b1561056957604051637b32c26b60e01b815260040160405180910390fd5b600480546040805163234d8e3d60e21b81529051849363ffffffff909316926001600160a01b03851692638d3638f492818301926020928290030181865afa1580156105b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dd9190614574565b63ffffffff161461060057604051621ff66160e61b815260040160405180910390fd5b604080516001600160a01b03841681523360208201527fd6e53d12bb441b2201be4949c7f431b383623888df2abfeef43aaaf272802d50910160405180910390a1602080546001600160a01b0319166001600160a01b039290921691909117905550565b813361067660a08301608084016141f1565b6001600160a01b03161461069d5760405163e3613aff60e01b815260040160405180910390fd5b6127108211156106c057604051633345cd4360e11b815260040160405180910390fd5b60045463ffffffff166106d960408501602086016141b4565b63ffffffff16146106fd57604051632a8e462760e01b815260040160405180910390fd5b600061071061070b85614696565b611300565b6000818152600d6020526040908190208590555190915081907fb243c3cea6cd1bbfd64d5d0765f13734ca7b87fdf14e017391fe12a8891434ca906107589086815260200190565b60405180910390a250505050565b6016546001190161078a57604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156107ba57604051633ee5b89360e01b815260040160405180910390fd5b806000036107db576040516348e7dc3f60e01b815260040160405180910390fd5b6107e482611330565b50506107f183838361122c565b5050600160165550565b6016546000906001190161082257604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561085257604051633ee5b89360e01b815260040160405180910390fd5b60008061085e846113a6565b909250905060006001826003811115610879576108796144f9565b14610885576002610888565b60035b60008481526008602052604090208054919250829160ff191660018360038111156108b5576108b56144f9565b021790555060008080610910866108f46108cf8b8061478b565b61018001356108de8c8061478b565b6108ef9060608101906040016141b4565b611767565b6003876003811115610908576109086144f9565b14158b6117a9565b91945092509050600061093a8985858a60038a6003811115610934576109346144f9565b14611d36565b90506001600160a01b0383166109508a8061478b565b6109619060808101906060016141f1565b6001600160a01b0316887f0b07a8b0b083f8976b3c832b720632f49cb8ba1e7a99e1b145f51a47d3391cb78c8686336040516109a09493929190614908565b60405180910390a450506001601655509295945050505050565b601754600090600119016109e1576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528c1660208083019190915260008284018190526001600160a01b03808e1660608501528b166080840152600160a08401528351601f88018390048302810183019094528684529260c08301918890889081908401838280828437600092018290525093855250505060208083018a905233604080850191909152606084018390526080840183905260a0840183905260c090930191909152815180830183526001600160a01b038d168082528183018c905283518085019094528352908201869052919250610ace918391611d7f565b60016017559b9a5050505050505050505050565b33610aeb6112d2565b6001600160a01b031614158015610b26575060033360009081526014602052604090205460ff166003811115610b2357610b236144f9565b14155b15610b4457604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff16610b7d57604051637840a40d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19169055815192835233908301527f4860b0a180d4b5969c2757493a999f05d0b22318320f154a02170aa239e24b1391015b60405180910390a150565b33610be36112d2565b6001600160a01b031614158015610c1e575060033360009081526014602052604090205460ff166003811115610c1b57610c1b6144f9565b14155b15610c3c57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116610c63576040516332f9c08d60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff1615610c9d5760405163e2a4506360e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19166001179055815192835233908301527f3860a100215fe93b6b95ed1ae0870e538f85a73b30d073f63fefc60e08b0c1249101610bcf565b60175460009060011901610d1d576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a16608084015260a083018190528351601f87018390048302810183019094528584529260c083019187908790819084018382808284376000920182905250938552505050602080830189905233604080850191909152606084018390526080840183905260a0840183905260c0909301829052825180840184526001600160a01b038d1681528082018b905283518085019094529183523490830152919250610e08918391611d7f565b60016017559a9950505050505050505050565b60175460009060011901610e42576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a166080840152600160a08401528351601f87018390048302810183019094528584529260c083019187908790819084018382808284376000920182905250938552505050602080830189905233604080850191909152606084018390526080840183905260a0840183905260c0909301829052825180840184526001600160a01b038d1681528082018b905283518085019094529183523490830152919250610e08918391611d7f565b60175460009060011901610f54576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528c1660208083019190915260008284018190526001600160a01b03808e1660608501528b16608084015260a083018190528351601f88018390048302810183019094528684529260c08301918890889081908401838280828437600092018290525093855250505060208083018a905233604080850191909152606084018390526080840183905260a0840183905260c090930191909152815180830183526001600160a01b038d168082528183018c905283518085019094528352908201869052919250610ace918391611d7f565b3361104a6112d2565b6001600160a01b031614158015611085575060033360009081526014602052604090205460ff166003811115611082576110826144f9565b14155b156110a357604051637b32c26b60e01b815260040160405180910390fd5b806110c157604051633bca644d60e11b815260040160405180910390fd5b63ffffffff821615806110de575060045463ffffffff8381169116145b156110fc57604051632892757b60e21b815260040160405180910390fd5b63ffffffff82166000818152600f602090815260409182902084905581519283526001600160a01b038416908301523382820152517fb07f562723347d6ea7f9f37b3b31f96b65104c3339d1c89e1b6fa88e2410b85c9181900360600190a15050565b803361117160a08301608084016141f1565b6001600160a01b0316146111985760405163e3613aff60e01b815260040160405180910390fd5b60045463ffffffff166111b160408401602085016141b4565b63ffffffff16146111d557604051630ada556f60e31b815260040160405180910390fd5b60006111e361070b84614696565b6000818152600e6020526040808220805460ff191660011790555191925082917f2510041334ede909998b9aefcca4300fc36c670dd00e1f7f0afffaca56adcb399190a2505050565b6002546001600160a01b03168061125657604051630bd7619560e41b815260040160405180910390fd5b6001600160a01b0383166112735761126e818361205b565b611288565b61127d838361217e565b6112888382846122cf565b604080518381526001600160a01b0385166020820152339181019190915284907ff90d3aafcedf55a0da208dd26d915e0ce1870ee9221586012487a0b366106f6590606001610758565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6000816040516020016113139190614c82565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201526000806113508461230e565b9050600061136682602001518360000151611767565b90506113718161232d565b60020154600160a01b900460ff1661139c5760405163a13f958f60e01b815260040160405180910390fd5b9094909350915050565b336000908152600b6020526040812054819060ff161580156113f457506113cd838061478b565b6113de9060a08101906080016141f1565b6001600160a01b0316336001600160a01b031614155b1561141257604051637c32a2b360e01b815260040160405180910390fd5b60045463ffffffff16611425848061478b565b6114369060408101906020016141b4565b63ffffffff161461145a5760405163b6bb322560e01b815260040160405180910390fd5b60006114696020850185614c95565b91506000905061148561147c868061478b565b61070b90614696565b60008181526008602052604090205490915060ff16821561172a57600c548311156114c3576040516313c06ef360e01b815260040160405180910390fd5b60008160038111156114d7576114d76144f9565b146114f557604051630caaeb0b60e11b815260040160405180910390fd5b601f60006115096080890160608a016141f1565b6001600160a01b0316815260208101919091526040016000205460ff1661154357604051631fa09b5360e31b815260040160405180910390fd5b611590826115546020890189614c95565b60405160200161156693929190614cde565b60408051601f19818403018152919052805160209091012061158b6080890189614cf8565b61236e565b6001600160a01b03166115a960808801606089016141f1565b6001600160a01b0316146115d057604051638579eca560e01b815260040160405180910390fd5b6040805160208082018590528183018690528251808303840181526060909201909252805191012060005b848110156117235761160b6123c0565b15801561166857506015600061162460208b018b614c95565b8481811061163457611634614d3e565b905060200201602081019061164991906141f1565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561168657604051630e1eb7f760e31b815260040160405180910390fd5b6116b98261169760408b018b614c95565b848181106116a7576116a7614d3e565b905060200281019061158b9190614cf8565b6001600160a01b03166116cf60208a018a614c95565b838181106116df576116df614d3e565b90506020020160208101906116f491906141f1565b6001600160a01b03161461171b57604051633a1dd23360e21b815260040160405180910390fd5b6001016115fb565b505061175c565b600181600381111561173e5761173e6144f9565b1461175c57604051636320d2cf60e11b815260040160405180910390fd5b909590945092505050565b6000828260405160200161178b92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080806117ba6020850185614c95565b60008981526009602052604090206117d392909161411f565b5060006117e0858061478b565b6117f19060608101906040016141b4565b63ffffffff16156118325761182f8761180a878061478b565b6101800135611819888061478b565b61182a9060608101906040016141b4565b6123e7565b90505b61183c858061478b565b610120013560000361185657600093509150819050611d2c565b6000611862868061478b565b6118739060c081019060a001614d54565b8061188c57506000898152600e602052604090205460ff165b9050600061189a878061478b565b610120013590508715611c3a5760006118b66020890189614c95565b91506118da90506118c7898061478b565b61012001356000600101546127106123f6565b915080600103611acb5782158015611951575081600a60006118ff60208c018c614c95565b600081811061191057611910614d3e565b905060200201602081019061192591906141f1565b6001600160a01b0390811682526020808301939093526040918201600090812091891681529252902054105b80156119675750601b546001600160a01b031615155b15611a36576015600061197d60208b018b614c95565b600081811061198e5761198e614d3e565b90506020020160208101906119a391906141f1565b6001600160a01b03168152602081019190915260400160002054610100900460ff166119e2576040516310c4e50960e01b815260040160405180910390fd5b600080611a238d8d866119f860208f018f614c95565b6000818110611a0957611a09614d3e565b9050602002016020810190611a1e91906141f1565b61240d565b9099509750949550611d2c945050505050565b81600a6000611a4860208c018c614c95565b6000818110611a5957611a59614d3e565b9050602002016020810190611a6e91906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000206000828254611ac09190614d87565b90915550611c389050565b6000611ad78284614db0565b905060005b611ae7600184614d87565b811015611b845781600a6000611b0060208e018e614c95565b85818110611b1057611b10614d3e565b9050602002016020810190611b2591906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611b779190614d87565b9091555050600101611adc565b506000611b918385614dc4565b611b9b9083614dd8565b905080600a6000611baf60208e018e614c95565b611bba600189614d87565b818110611bc957611bc9614d3e565b9050602002016020810190611bde91906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611c309190614d87565b909155505050505b505b611c44878061478b565b611c559060608101906040016141b4565b60045463ffffffff9081169116148015611c7b57506000611c758a61232d565b60030154115b15611ca75760008981526007602052604081206004018054839290611ca1908490614d87565b90915550505b8115611cd25760008a8152600e60205260409020805460ff191690559450909250829150611d2c9050565b60008a8152600d602052604081208054908290559080611d1e8c8786868503611d0857611cff8e8061478b565b60e00135611d0a565b865b611d148f8061478b565b61014001356125cc565b909950975094955050505050505b9450945094915050565b6000611d5d84611d46888061478b565b611d579060808101906060016141f1565b876122cf565b611d7383868685611d6e8b8061478b565b612651565b50835b95945050505050565b601a54600090600160a01b900460ff1615611dad57604051633ee5b89360e01b815260040160405180910390fd5b82516000906001600160a01b0316158015611dcb5750602084015115155b15611de95760405163ae715ad360e01b815260040160405180910390fd5b611df685602001516127c5565b60608601519091506001600160a01b0316611e235760405162845fdd60e41b815260040160405180910390fd5b6127108560e001511115611e4a5760405163388d723160e11b815260040160405180910390fd5b6040805180820190915260008082526020820181905290819086516000906001600160a01b031615611ff1576000611e858960000151611330565b90935090506000611e958261232d565b84518c5163ffffffff9081169116149350905082611ebd5780546001600160a01b0316611ec3565b60208401515b95506001600160a01b038616611eec5760405163965a46c160e01b815260040160405180910390fd5b6003810154838015611efe5750600081115b15611f4f5760008b602001518360040154611f199190614dd8565b905081811115611f3c576040516348ba8bf160e01b815260040160405180910390fd5b6000848152600760205260409020600401555b50835163ffffffff1660408c01526020808501516101808d01528a015115611fee57611f838a600001518b6020015161217e565b611f9c828b60000151888d602001518f60e001516127fe565b6101208c01528951611fe7906001600160a01b03888116911614611fce576001820154600160a01b900460ff16611fdb565b8154600160a01b900460ff165b60128c60200151612881565b6101408c01525b50505b6003805490600061200183614deb565b909155506101608a015261201489611300565b60208801519093501561203457612034838860000151896020015161122c565b61204c838a8a600001518b6020015189878a886128ec565b509093505050505b9392505050565b804710156120b05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146120fd576040519150601f19603f3d011682016040523d82523d6000602084013e612102565b606091505b50509050806121795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016120a7565b505050565b8060000361218a575050565b6001600160a01b0382166121b157604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156121fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221e9190614e04565b90506122356001600160a01b038316333086612ad3565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa15801561227d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a19190614e04565b6122ab9190614d87565b146122c957604051630e40773560e21b815260040160405180910390fd5b50505050565b806000036122dc57505050565b6001600160a01b03831661230357604051633a48ca7b60e11b815260040160405180910390fd5b612179838383612b3e565b604080518082019091526000808252602082015261040c826000612b6e565b6000818152600760205260408120600180820154839291600160a01b90910460ff1610156120545760405163618cca3f60e11b815260040160405180910390fd5b60006123b861237c85612c66565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ca192505050565b949350505050565b6000806123cb6112d2565b6001600160a01b031614806123e2575060125460ff165b905090565b60006123b88484846000612cc5565b6000816124038486614e1d565b6123b89190614db0565b600080600061241b86612d00565b601b546040516369a933a560e01b81526001600160a01b03808416600483015260248201899052306044830152600060648301529293509116906369a933a590608401600060405180830381600087803b15801561247857600080fd5b505af115801561248c573d6000803e3d6000fd5b5050601b54604051631a4ca37b60e21b81526001600160a01b038581166004830152602482018a90523060448301526000945090911691506369328dec906064016020604051808303816000875af11580156124ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125109190614e04565b9050858110156125335760405163407559a360e11b815260040160405180910390fd5b6000888152601d60205260409020869055601c5461271090612556908890614e1d565b6125609190614db0565b6000898152601e60209081526040918290209290925580516001600160a01b038581168252928101899052918716918a917f2d3ba0fa5be2ef8cb1ec8920a07a6cbccc2397b18ca3e70f48ea695500b8f218910160405180910390a35084925090505b94509492505050565b60008060006125da8861232d565b60018101549091506001600160a01b0390811690881681036126025786935091506126479050565b866000036126165786935091506126479050565b6126408989838a61263b60128860010160149054906101000a900460ff168c8e612d39565b612d85565b9350935050505b9550959350505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061267f60c0830183614cf8565b60405161268d929190614e34565b604051809103902003156127be576000806127546126b160808501606086016141f1565b6127105a6126bf9190614d87565b600061010063fd614f4160e01b8c8c8c8c6126db5760006126ed565b6126ed6101208d016101008e016141f1565b6126fa60208e018e6141b4565b61270760c08f018f614cf8565b60405160240161271d9796959493929190614e44565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ec4565b9150915083158015612764575081155b15612781576040516264cdd360e41b815260040160405180910390fd5b867fb1a4ab59facaedd6d3a71da3902e0a1fa5b99750c0e20cd878334378a41cb33583836040516127b3929190614e97565b60405180910390a250505b5050505050565b63ffffffff81166000908152600f6020526040902054806127f957604051630c3bcd4960e41b815260040160405180910390fd5b919050565b60008260000361281057506000611d76565b846001600160a01b0316846001600160a01b031603612830575081611d76565b600061283b8761232d565b905060006128748888888861263b8760010160149054906101000a900460ff168860000160149054906101000a900460ff168c8c612d39565b5098975050505050505050565b60008260ff168460ff1603612897575080612054565b60008360ff168560ff1610156128cd576128b18585614eb2565b6128bc90600a614faf565b6128c69084614e1d565b90506123b8565b6128d78486614eb2565b6128e290600a614faf565b611d769084614db0565b610120870151801561295e578161295e57604051632770a7eb60e21b8152306004820152602481018290526001600160a01b03841690639dc29fac90604401600060405180830381600087803b15801561294557600080fd5b505af1158015612959573d6000803e3d6000fd5b505050505b6000846000015185602001516003848d604051602001612982959493929190614fbe565b60408051601f1981840301815282825260208054639fa92f9d60e01b8552925191945060009384936001600160a01b031692639fa92f9d926004808401939192918290030181865afa1580156129dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a009190614ffd565b6001600160a01b031663fa31de018c602001518a866040518463ffffffff1660e01b8152600401612a339392919061501a565b6000604051808303816000875af1158015612a52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a7a919081019061503f565b91509150818b61016001518d7fed8e6ba697dd65259e5ce532ac08ff06d1a3607bcec58f8f0937fe36a5666c548e8e8e8c88604051612abd9594939291906150c1565b60405180910390a4505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526122c99085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f4e565b6040516001600160a01b03831660248201526044810182905261217990849063a9059cbb60e01b90606401612b07565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b038416612bab57905061040c565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215612bf657905061040c565b612c008484613020565b15612c2657600483015463ffffffff1681526001600160a01b0384166020820152612054565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01611313565b6000806000612cb0858561305f565b91509150612cbd816130a4565b509392505050565b600481015460009063ffffffff90811690841603612ce45750826123b8565b612ced8561232d565b546001600160a01b031695945050505050565b600080612d0c8361232d565b600101546001600160a01b031690508061040c57604051630558a50760e31b815260040160405180910390fd5b600082600003612d4b575060006123b8565b6000612710612d5a8482614d87565b612d649086614e1d565b612d6e9190614db0565b9050612d7b868683612881565b9695505050505050565b600085815260186020526040812081908190612da0816131f1565b15612dd257612dc6612db28a8a61320e565b612dbc8b8a61320e565b839190898961328e565b87935093505050612647565b6000612ddd8a61232d565b600201546001600160a01b0390811691508990612dfe908216836000613597565b612e126001600160a01b038216838a6136ac565b6001600160a01b03821663d460f0a2898c8c8b612e31610e1042614dd8565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af1158015612e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb69190614e04565b899550955050505050612647565b6000606060008060008661ffff166001600160401b03811115612ee957612ee9614591565b6040519080825280601f01601f191660200182016040528015612f13576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612f34578692505b828152826000602083013e90999098509650505050505050565b6000612fa3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661375e9092919063ffffffff16565b8051909150156121795780806020019051810190612fc19190615110565b6121795760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016120a7565b6001600160a01b038216600090815260068201602052604081205463ffffffff161561304e5750600061040c565b50506001600160a01b03163b151590565b60008082516041036130955760208301516040840151606085015160001a6130898782858561376d565b9450945050505061309d565b506000905060025b9250929050565b60008160048111156130b8576130b86144f9565b036130c05750565b60018160048111156130d4576130d46144f9565b036131215760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016120a7565b6002816004811115613135576131356144f9565b036131825760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016120a7565b6003816004811115613196576131966144f9565b036131ee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016120a7565b50565b600c81015460009060ff1615801561040c57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff169291908390811061325b5761325b614d3e565b6000918252602090912001546001600160a01b0316146123b85760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff16156132d65760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b60448201526064016120a7565b85600a018560ff16815481106132ee576132ee614d3e565b90600052602060002001548311156133415760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b60448201526064016120a7565b600080600088600a0180548060200260200160405190810160405280929190818152602001828054801561339457602002820191906000526020600020905b815481526020019060010190808311613380575b505050505090506133a8898989898561382e565b9093509150848310156133ea5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b60448201526064016120a7565b6000896009018860ff168154811061340457613404614d3e565b90600052602060002001546402540be4008b60060154856134259190614e1d565b61342f9190614db0565b6134399190614db0565b905086828a60ff168151811061345157613451614d3e565b60200260200101516134639190614dd8565b8a600a018a60ff168154811061347b5761347b614d3e565b90600052602060002001819055508084838a60ff16815181106134a0576134a0614d3e565b60200260200101516134b29190614d87565b6134bc9190614d87565b8a600a018960ff16815481106134d4576134d4614d3e565b600091825260209091200155801561353957808a600b018960ff16815481106134ff576134ff614d3e565b90600052602060002001546135149190614dd8565b8a600b018960ff168154811061352c5761352c614d3e565b6000918252602090912001555b8954604080518981526020810187905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b8015806136115750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f9190614e04565b155b61367c5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016120a7565b6040516001600160a01b03831660248201526044810182905261217990849063095ea7b360e01b90606401612b07565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156136fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137219190614e04565b61372b9190614dd8565b6040516001600160a01b0385166024820152604481018290529091506122c990859063095ea7b360e01b90606401612b07565b60606123b884846000856139f4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156137a457506000905060036125c3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156137f8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613821576000600192509250506125c3565b9660009650945050505050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561388157602002820191906000526020600020905b81548152602001906001019080831161386d575b5050505050905060006138948583613acf565b905080518860ff161080156138ac575080518760ff16105b6138ed5760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b60448201526064016120a7565b6000818960ff168151811061390457613904614d3e565b6020026020010151838a60ff168151811061392157613921614d3e565b6020026020010151886139349190614e1d565b61393e9190614dd8565b9050600061395761394e8c613bd9565b8b8b8587613be4565b9050600181848b60ff168151811061397157613971614d3e565b60200260200101516139839190614d87565b61398d9190614d87565b95506402540be4008b60050154876139a59190614e1d565b6139af9190614db0565b9450838960ff16815181106139c6576139c6614d3e565b602002602001015185876139da9190614d87565b6139e49190614db0565b9550505050509550959350505050565b606082471015613a555760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016120a7565b600080866001600160a01b03168587604051613a71919061512d565b60006040518083038185875af1925050503d8060008114613aae576040519150601f19603f3d011682016040523d82523d6000602084013e613ab3565b606091505b5091509150613ac487838387613e4b565b979650505050505050565b81518151606091908114613b1c5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b60448201526064016120a7565b6000816001600160401b03811115613b3657613b36614591565b604051908082528060200260200182016040528015613b5f578160200160208202803683370190505b50905060005b82811015613bd057848181518110613b7f57613b7f614d3e565b6020026020010151868281518110613b9957613b99614d3e565b6020026020010151613bab9190614e1d565b828281518110613bbd57613bbd614d3e565b6020908102919091010152600101613b65565b50949350505050565b600061040c82613ec4565b805160009060ff80861690871603613c3e5760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c6600000000000000000060448201526064016120a7565b808660ff16108015613c525750808560ff16105b613c905760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b60448201526064016120a7565b6000613c9c8489613f0d565b905080600080613cac8b86614e1d565b90506000805b86811015613d33578b60ff168103613ccc57899150613cff565b8a60ff168114613cf757888181518110613ce857613ce8614d3e565b60200260200101519150613cff565b600101613cb2565b613d098285614dd8565b9350613d158783614e1d565b613d1f8787614e1d565b613d299190614db0565b9450600101613cb2565b50613d3e8683614e1d565b6064613d4a8787614e1d565b613d549190614e1d565b613d5e9190614db0565b9350600082613d6e606488614e1d565b613d789190614db0565b613d829085614dd8565b9050600086815b610100811015613e02578192508884836002613da59190614e1d565b613daf9190614dd8565b613db99190614d87565b88613dc48480614e1d565b613dce9190614dd8565b613dd89190614db0565b9150613de482846140ba565b15613dfa57509850611d76975050505050505050565b600101613d89565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765000060448201526064016120a7565b60608315613eba578251600003613eb3576001600160a01b0385163b613eb35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016120a7565b50816123b8565b6123b883836140d0565b600481015460028201546001830154909190808314801590613ee557508142105b15613f06576000846003015490508083038142038502428503840201049350505b5050919050565b815160009081805b82811015613f4c57858181518110613f2f57613f2f614d3e565b602002602001015182613f429190614dd8565b9150600101613f15565b5080600003613f605760009250505061040c565b60008181613f6e8588614e1d565b905060005b61010081101561407b578260005b87811015613fcc57878b8281518110613f9c57613f9c614d3e565b6020026020010151613fae9190614e1d565b613fb88684614e1d565b613fc29190614db0565b9150600101613f81565b5083945080876001613fde9190614dd8565b613fe89190614e1d565b606485613ff58287614d87565b613fff9190614e1d565b6140099190614db0565b6140139190614dd8565b8461401e8984614e1d565b606461402a8a88614e1d565b6140349190614db0565b61403e9190614dd8565b6140489190614e1d565b6140529190614db0565b935061405e84866140ba565b15614072578397505050505050505061040c565b50600101613f73565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b60448201526064016120a7565b600060026140c884846140fa565b109392505050565b8151156140e05781518083602001fd5b8060405162461bcd60e51b81526004016120a7919061513f565b6000818311156141155761410e8284614d87565b905061040c565b6120548383614d87565b828054828255906000526020600020908101928215614172579160200282015b828111156141725781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061413f565b5061417e929150614182565b5090565b5b8082111561417e5760008155600101614183565b63ffffffff811681146131ee57600080fd5b80356127f981614197565b6000602082840312156141c657600080fd5b813561205481614197565b6001600160a01b03811681146131ee57600080fd5b80356127f9816141d1565b60006020828403121561420357600080fd5b8135612054816141d1565b60006020828403121561422057600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156142685783516001600160a01b031683529284019291840191600101614243565b50909695505050505050565b60006101a0828403121561428757600080fd5b50919050565b600080604083850312156142a057600080fd5b82356001600160401b038111156142b657600080fd5b6142c285828601614274565b95602094909401359450505050565b6000806000606084860312156142e657600080fd5b8335925060208401356142f8816141d1565b929592945050506040919091013590565b60006020828403121561431b57600080fd5b81356001600160401b0381111561433157600080fd5b820160a0818503121561205457600080fd5b60008083601f84011261435557600080fd5b5081356001600160401b0381111561436c57600080fd5b60208301915083602082850101111561309d57600080fd5b60008060008060008060008060006101008a8c0312156143a357600080fd5b89356143ae81614197565b985060208a01356143be816141d1565b975060408a01356143ce816141d1565b965060608a01356143de816141d1565b955060808a0135945060a08a0135935060c08a01356001600160401b0381111561440757600080fd5b6144138c828d01614343565b9a9d999c50979a9699959894979660e00135949350505050565b60008060008060008060008060e0898b03121561444957600080fd5b883561445481614197565b97506020890135614464816141d1565b96506040890135614474816141d1565b95506060890135614484816141d1565b94506080890135935060a0890135925060c08901356001600160401b038111156144ad57600080fd5b6144b98b828c01614343565b999c989b5096995094979396929594505050565b600080604083850312156144e057600080fd5b82356144eb81614197565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b600481106131ee57634e487b7160e01b600052602160045260246000fd5b6020810161453a8361450f565b91905290565b60006020828403121561455257600080fd5b81356001600160401b0381111561456857600080fd5b6123b884828501614274565b60006020828403121561458657600080fd5b815161205481614197565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b03811182821017156145ca576145ca614591565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145f8576145f8614591565b604052919050565b80151581146131ee57600080fd5b80356127f981614600565b60006001600160401b0382111561463257614632614591565b50601f01601f191660200190565b600082601f83011261465157600080fd5b813561466461465f82614619565b6145d0565b81815284602083860101111561467957600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a082360312156146a957600080fd5b6146b16145a7565b6146ba836141a9565b81526146c8602084016141a9565b60208201526146d9604084016141a9565b60408201526146ea606084016141e6565b60608201526146fb608084016141e6565b608082015261470c60a0840161460e565b60a082015260c08301356001600160401b0381111561472a57600080fd5b61473636828601614640565b60c08301525060e083013560e08201526101006147548185016141e6565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b6000823561019e198336030181126147a257600080fd5b9190910192915050565b6000808335601e198436030181126147c357600080fd5b83016020810192503590506001600160401b038111156147e257600080fd5b80360382131561309d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261483157600080fd5b83016020810192503590506001600160401b0381111561485057600080fd5b8060051b360382131561309d57600080fd5b8183526000602080850194508260005b858110156148a0578135614885816141d1565b6001600160a01b031687529582019590820190600101614872565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156148fb5782840389526148dc82886147ac565b6148e78682846147f1565b9a87019a95505050908401906001016148c5565b5091979650505050505050565b608081526000610120863561019e1988360301811261492657600080fd5b60a06080850152870161494882850161493e836141a9565b63ffffffff169052565b614954602082016141a9565b6101406149688187018363ffffffff169052565b614974604084016141a9565b915061016061498a8188018463ffffffff169052565b614996606085016141e6565b92506101806149af818901856001600160a01b03169052565b6149bb608086016141e6565b93506101a06149d4818a01866001600160a01b03169052565b6149e060a0870161460e565b8015156101c08b015294506149f860c08701876147ac565b9550816101e08b0152614a106102c08b0187836147f1565b9550505060e0850135610200890152610100614a2d8187016141e6565b6001600160a01b03166102208a0152858701356102408a0152838601356102608a0152828601356102808a0152818601356102a08a0152614a7160208e018e61481a565b97509550607f199350838986030160a08a0152614a8f858888614862565b9650614a9e60408e018e61481a565b96509450838988030160c08a0152614ab78787876148ab565b9650614ac560608e016141e6565b6001600160a01b03811660e08b01529550614ae360808e018e6147ac565b965094508389880301818a015250505050614aff8383836147f1565b9350505050614b1960208301866001600160a01b03169052565b836040830152611d7660608301846001600160a01b03169052565b60005b83811015614b4f578181015183820152602001614b37565b50506000910152565b60008151808452614b70816020860160208601614b34565b601f01601f19169290920160200192915050565b805163ffffffff16825260006101a06020830151614baa602086018263ffffffff169052565b506040830151614bc2604086018263ffffffff169052565b506060830151614bdd60608601826001600160a01b03169052565b506080830151614bf860808601826001600160a01b03169052565b5060a0830151614c0c60a086018215159052565b5060c08301518160c0860152614c2482860182614b58565b91505060e083015160e085015261010080840151614c4c828701826001600160a01b03169052565b50506101208381015190850152610140808401519085015261016080840151908501526101809283015192909301919091525090565b6020815260006120546020830184614b84565b6000808335601e19843603018112614cac57600080fd5b8301803591506001600160401b03821115614cc657600080fd5b6020019150600581901b360382131561309d57600080fd5b838152604060208201526000611d76604083018486614862565b6000808335601e19843603018112614d0f57600080fd5b8301803591506001600160401b03821115614d2957600080fd5b60200191503681900382131561309d57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614d6657600080fd5b813561205481614600565b634e487b7160e01b600052601160045260246000fd5b8181038181111561040c5761040c614d71565b634e487b7160e01b600052601260045260246000fd5b600082614dbf57614dbf614d9a565b500490565b600082614dd357614dd3614d9a565b500690565b8082018082111561040c5761040c614d71565b600060018201614dfd57614dfd614d71565b5060010190565b600060208284031215614e1657600080fd5b5051919050565b808202811582820484141761040c5761040c614d71565b8183823760009101908152919050565b878152602081018790526001600160a01b0386811660408301528516606082015263ffffffff8416608082015260c060a08201819052600090614e8a90830184866147f1565b9998505050505050505050565b82151581526040602082015260006123b86040830184614b58565b60ff828116828216039081111561040c5761040c614d71565b600181815b80851115614f06578160001904821115614eec57614eec614d71565b80851615614ef957918102915b93841c9390800290614ed0565b509250929050565b600082614f1d5750600161040c565b81614f2a5750600061040c565b8160018114614f405760028114614f4a57614f66565b600191505061040c565b60ff841115614f5b57614f5b614d71565b50506001821b61040c565b5060208310610133831016604e8410600b8410161715614f89575081810a61040c565b614f938383614ecb565b8060001904821115614fa757614fa7614d71565b029392505050565b600061205460ff841683614f0e565b63ffffffff60e01b8660e01b168152846004820152614fdc8461450f565b60f89390931b60248401526025830191909152604582015260650192915050565b60006020828403121561500f57600080fd5b8151612054816141d1565b63ffffffff84168152826020820152606060408201526000611d766060830184614b58565b6000806040838503121561505257600080fd5b8251915060208301516001600160401b0381111561506f57600080fd5b8301601f8101851361508057600080fd5b805161508e61465f82614619565b8181528660208385010111156150a357600080fd5b6150b4826020830160208601614b34565b8093505050509250929050565b60a0815260006150d460a0830188614b84565b6001600160a01b038781166020850152604084018790528516606084015282810360808401526151048185614b58565b98975050505050505050565b60006020828403121561512257600080fd5b815161205481614600565b600082516147a2818460208701614b34565b6020815260006120546020830184614b5856fea264697066735822122083a85792fc0e29cd905f805175da0fd17a6a6073b7d3197f199a713d8d3885bf64736f6c63430008110033"; + "0x608060405234801561001057600080fd5b50615188806100206000396000f3fe60806040526004361061011f5760003560e01c80636989ca7c116100a0578063affed0e011610064578063affed0e01461033e578063b49c53a714610353578063bfd7903014610373578063c2fb26a6146103b0578063cb8058ba146103d557600080fd5b80636989ca7c146102b85780638a336231146102d85780638aac16ba146102f857806391f5de791461030b57806393f18ac51461031e57600080fd5b806341bdc8b5116100e757806341bdc8b51461020a578063541267111461022a57806359efa1621461024a57806363e3e7d21461026a578063674dc9331461029857600080fd5b8063121cca3114610124578063159e041f146101615780631a8bc0e1146101aa5780632424401f146101d75780633339df96146101ec575b600080fd5b34801561013057600080fd5b5061014461013f3660046141b4565b6103f5565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561016d57600080fd5b5061019a61017c3660046141f1565b6001600160a01b03166000908152601f602052604090205460ff1690565b6040519015158152602001610158565b3480156101b657600080fd5b506101ca6101c536600461420e565b610412565b6040516101589190614227565b6101ea6101e536600461420e565b61047e565b005b3480156101f857600080fd5b506020546001600160a01b0316610144565b34801561021657600080fd5b506101ea6102253660046141f1565b6104e6565b34801561023657600080fd5b506101ea61024536600461428d565b610643565b34801561025657600080fd5b506101ea6102653660046142d1565b610745565b34801561027657600080fd5b5061028a610285366004614309565b6107da565b604051908152602001610158565b3480156102a457600080fd5b5061028a6102b3366004614384565b610999565b3480156102c457600080fd5b506101ea6102d33660046141f1565b610ac1565b3480156102e457600080fd5b506101ea6102f33660046141f1565b610bb9565b61028a61030636600461442d565b610cd5565b61028a61031936600461442d565b610dfa565b34801561032a57600080fd5b5061028a610339366004614384565b610f0c565b34801561034a57600080fd5b5060035461028a565b34801561035f57600080fd5b506101ea61036e3660046144cd565b611020565b34801561037f57600080fd5b506103a361038e36600461420e565b60009081526008602052604090205460ff1690565b604051610158919061452d565b3480156103bc57600080fd5b5060045460405163ffffffff9091168152602001610158565b3480156103e157600080fd5b506101ea6103f0366004614540565b61113e565b63ffffffff81166000908152600f60205260408120545b92915050565b60008181526009602090815260409182902080548351818402810184019094528084526060939283018282801561047257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610454575b50505050509050919050565b601654600119016104a257604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff16156104d257604051633ee5b89360e01b815260040160405180910390fd5b6104de8160003461120b565b506001601655565b336104ef6112d2565b6001600160a01b03161415801561052a575060033360009081526014602052604090205460ff166003811115610527576105276144f9565b14155b1561054857604051637b32c26b60e01b815260040160405180910390fd5b600480546040805163234d8e3d60e21b81529051849363ffffffff909316926001600160a01b03851692638d3638f492818301926020928290030181865afa158015610598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bc9190614574565b63ffffffff16146105df57604051621ff66160e61b815260040160405180910390fd5b604080516001600160a01b03841681523360208201527fd6e53d12bb441b2201be4949c7f431b383623888df2abfeef43aaaf272802d50910160405180910390a1602080546001600160a01b0319166001600160a01b039290921691909117905550565b813361065560a08301608084016141f1565b6001600160a01b03161461067c5760405163e3613aff60e01b815260040160405180910390fd5b61271082111561069f57604051633345cd4360e11b815260040160405180910390fd5b60045463ffffffff166106b860408501602086016141b4565b63ffffffff16146106dc57604051632a8e462760e01b815260040160405180910390fd5b60006106ef6106ea85614696565b611300565b6000818152600d6020526040908190208590555190915081907fb243c3cea6cd1bbfd64d5d0765f13734ca7b87fdf14e017391fe12a8891434ca906107379086815260200190565b60405180910390a250505050565b6016546001190161076957604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561079957604051633ee5b89360e01b815260040160405180910390fd5b806000036107ba576040516348e7dc3f60e01b815260040160405180910390fd5b6107c382611330565b50506107d083838361120b565b5050600160165550565b6016546000906001190161080157604051637ce54e2d60e11b815260040160405180910390fd5b6002601655601a54600160a01b900460ff161561083157604051633ee5b89360e01b815260040160405180910390fd5b60008061083d846113a6565b909250905060006001826003811115610858576108586144f9565b14610864576002610867565b60035b60008481526008602052604090208054919250829160ff19166001836003811115610894576108946144f9565b0217905550600080806108ef866108d36108ae8b8061478b565b61018001356108bd8c8061478b565b6108ce9060608101906040016141b4565b611767565b60038760038111156108e7576108e76144f9565b14158b6117a9565b9194509250905060006109198985858a60038a6003811115610913576109136144f9565b14611d36565b90506001600160a01b03831661092f8a8061478b565b6109409060808101906060016141f1565b6001600160a01b0316887f0b07a8b0b083f8976b3c832b720632f49cb8ba1e7a99e1b145f51a47d3391cb78c86863360405161097f9493929190614908565b60405180910390a450506001601655509295945050505050565b601754600090600119016109c0576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528c1660208083019190915260008284018190526001600160a01b03808e1660608501528b166080840152600160a08401528351601f88018390048302810183019094528684529260c08301918890889081908401838280828437600092018290525093855250505060208083018a905233604080850191909152606084018390526080840183905260a0840183905260c090930191909152815180830183526001600160a01b038d168082528183018c905283518085019094528352908201869052919250610aad918391611d7f565b60016017559b9a5050505050505050505050565b33610aca6112d2565b6001600160a01b031614158015610b05575060033360009081526014602052604090205460ff166003811115610b0257610b026144f9565b14155b15610b2357604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff16610b5c57604051637840a40d60e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19169055815192835233908301527f4860b0a180d4b5969c2757493a999f05d0b22318320f154a02170aa239e24b1391015b60405180910390a150565b33610bc26112d2565b6001600160a01b031614158015610bfd575060033360009081526014602052604090205460ff166003811115610bfa57610bfa6144f9565b14155b15610c1b57604051637b32c26b60e01b815260040160405180910390fd5b6001600160a01b038116610c42576040516332f9c08d60e11b815260040160405180910390fd5b6001600160a01b0381166000908152601f602052604090205460ff1615610c7c5760405163e2a4506360e01b815260040160405180910390fd5b6001600160a01b0381166000818152601f6020908152604091829020805460ff19166001179055815192835233908301527f3860a100215fe93b6b95ed1ae0870e538f85a73b30d073f63fefc60e08b0c1249101610bae565b60175460009060011901610cfc576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a16608084015260a083018190528351601f87018390048302810183019094528584529260c083019187908790819084018382808284376000920182905250938552505050602080830189905233604080850191909152606084018390526080840183905260a0840183905260c0909301829052825180840184526001600160a01b038d1681528082018b905283518085019094529183523490830152919250610de7918391611d7f565b60016017559a9950505050505050505050565b60175460009060011901610e21576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528b1660208083019190915260008284018190526001600160a01b03808d1660608501528a166080840152600160a08401528351601f87018390048302810183019094528584529260c083019187908790819084018382808284376000920182905250938552505050602080830189905233604080850191909152606084018390526080840183905260a0840183905260c0909301829052825180840184526001600160a01b038d1681528082018b905283518085019094529183523490830152919250610de7918391611d7f565b60175460009060011901610f33576040516363b468cb60e11b815260040160405180910390fd5b6002601755604080516101a08101825260045463ffffffff90811682528c1660208083019190915260008284018190526001600160a01b03808e1660608501528b16608084015260a083018190528351601f88018390048302810183019094528684529260c08301918890889081908401838280828437600092018290525093855250505060208083018a905233604080850191909152606084018390526080840183905260a0840183905260c090930191909152815180830183526001600160a01b038d168082528183018c905283518085019094528352908201869052919250610aad918391611d7f565b336110296112d2565b6001600160a01b031614158015611064575060033360009081526014602052604090205460ff166003811115611061576110616144f9565b14155b1561108257604051637b32c26b60e01b815260040160405180910390fd5b806110a057604051633bca644d60e11b815260040160405180910390fd5b63ffffffff821615806110bd575060045463ffffffff8381169116145b156110db57604051632892757b60e21b815260040160405180910390fd5b63ffffffff82166000818152600f602090815260409182902084905581519283526001600160a01b038416908301523382820152517fb07f562723347d6ea7f9f37b3b31f96b65104c3339d1c89e1b6fa88e2410b85c9181900360600190a15050565b803361115060a08301608084016141f1565b6001600160a01b0316146111775760405163e3613aff60e01b815260040160405180910390fd5b60045463ffffffff1661119060408401602085016141b4565b63ffffffff16146111b457604051630ada556f60e31b815260040160405180910390fd5b60006111c26106ea84614696565b6000818152600e6020526040808220805460ff191660011790555191925082917f2510041334ede909998b9aefcca4300fc36c670dd00e1f7f0afffaca56adcb399190a2505050565b6002546001600160a01b03168061123557604051630bd7619560e41b815260040160405180910390fd5b6001600160a01b0383166112735734600003611264576040516348e7dc3f60e01b815260040160405180910390fd5b61126e818361205b565b611288565b61127d838361217e565b6112888382846122cf565b604080518381526001600160a01b0385166020820152339181019190915284907ff90d3aafcedf55a0da208dd26d915e0ce1870ee9221586012487a0b366106f6590606001610737565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c1320546001600160a01b031690565b6000816040516020016113139190614c82565b604051602081830303815290604052805190602001209050919050565b60408051808201909152600080825260208201526000806113508461230e565b9050600061136682602001518360000151611767565b90506113718161232d565b60020154600160a01b900460ff1661139c5760405163a13f958f60e01b815260040160405180910390fd5b9094909350915050565b336000908152600b6020526040812054819060ff161580156113f457506113cd838061478b565b6113de9060a08101906080016141f1565b6001600160a01b0316336001600160a01b031614155b1561141257604051637c32a2b360e01b815260040160405180910390fd5b60045463ffffffff16611425848061478b565b6114369060408101906020016141b4565b63ffffffff161461145a5760405163b6bb322560e01b815260040160405180910390fd5b60006114696020850185614c95565b91506000905061148561147c868061478b565b6106ea90614696565b60008181526008602052604090205490915060ff16821561172a57600c548311156114c3576040516313c06ef360e01b815260040160405180910390fd5b60008160038111156114d7576114d76144f9565b146114f557604051630caaeb0b60e11b815260040160405180910390fd5b601f60006115096080890160608a016141f1565b6001600160a01b0316815260208101919091526040016000205460ff1661154357604051631fa09b5360e31b815260040160405180910390fd5b611590826115546020890189614c95565b60405160200161156693929190614cde565b60408051601f19818403018152919052805160209091012061158b6080890189614cf8565b61236e565b6001600160a01b03166115a960808801606089016141f1565b6001600160a01b0316146115d057604051638579eca560e01b815260040160405180910390fd5b6040805160208082018590528183018690528251808303840181526060909201909252805191012060005b848110156117235761160b6123c0565b15801561166857506015600061162460208b018b614c95565b8481811061163457611634614d3e565b905060200201602081019061164991906141f1565b6001600160a01b0316815260208101919091526040016000205460ff16155b1561168657604051630e1eb7f760e31b815260040160405180910390fd5b6116b98261169760408b018b614c95565b848181106116a7576116a7614d3e565b905060200281019061158b9190614cf8565b6001600160a01b03166116cf60208a018a614c95565b838181106116df576116df614d3e565b90506020020160208101906116f491906141f1565b6001600160a01b03161461171b57604051633a1dd23360e21b815260040160405180910390fd5b6001016115fb565b505061175c565b600181600381111561173e5761173e6144f9565b1461175c57604051636320d2cf60e11b815260040160405180910390fd5b909590945092505050565b6000828260405160200161178b92919091825263ffffffff16602082015260400190565b60405160208183030381529060405280519060200120905092915050565b600080806117ba6020850185614c95565b60008981526009602052604090206117d392909161411f565b5060006117e0858061478b565b6117f19060608101906040016141b4565b63ffffffff16156118325761182f8761180a878061478b565b6101800135611819888061478b565b61182a9060608101906040016141b4565b6123e7565b90505b61183c858061478b565b610120013560000361185657600093509150819050611d2c565b6000611862868061478b565b6118739060c081019060a001614d54565b8061188c57506000898152600e602052604090205460ff165b9050600061189a878061478b565b610120013590508715611c3a5760006118b66020890189614c95565b91506118da90506118c7898061478b565b61012001356000600101546127106123f6565b915080600103611acb5782158015611951575081600a60006118ff60208c018c614c95565b600081811061191057611910614d3e565b905060200201602081019061192591906141f1565b6001600160a01b0390811682526020808301939093526040918201600090812091891681529252902054105b80156119675750601b546001600160a01b031615155b15611a36576015600061197d60208b018b614c95565b600081811061198e5761198e614d3e565b90506020020160208101906119a391906141f1565b6001600160a01b03168152602081019190915260400160002054610100900460ff166119e2576040516310c4e50960e01b815260040160405180910390fd5b600080611a238d8d866119f860208f018f614c95565b6000818110611a0957611a09614d3e565b9050602002016020810190611a1e91906141f1565b61240d565b9099509750949550611d2c945050505050565b81600a6000611a4860208c018c614c95565b6000818110611a5957611a59614d3e565b9050602002016020810190611a6e91906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000866001600160a01b03166001600160a01b031681526020019081526020016000206000828254611ac09190614d87565b90915550611c389050565b6000611ad78284614db0565b905060005b611ae7600184614d87565b811015611b845781600a6000611b0060208e018e614c95565b85818110611b1057611b10614d3e565b9050602002016020810190611b2591906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611b779190614d87565b9091555050600101611adc565b506000611b918385614dc4565b611b9b9083614dd8565b905080600a6000611baf60208e018e614c95565b611bba600189614d87565b818110611bc957611bc9614d3e565b9050602002016020810190611bde91906141f1565b6001600160a01b03166001600160a01b031681526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254611c309190614d87565b909155505050505b505b611c44878061478b565b611c559060608101906040016141b4565b60045463ffffffff9081169116148015611c7b57506000611c758a61232d565b60030154115b15611ca75760008981526007602052604081206004018054839290611ca1908490614d87565b90915550505b8115611cd25760008a8152600e60205260409020805460ff191690559450909250829150611d2c9050565b60008a8152600d602052604081208054908290559080611d1e8c8786868503611d0857611cff8e8061478b565b60e00135611d0a565b865b611d148f8061478b565b61014001356125cc565b909950975094955050505050505b9450945094915050565b6000611d5d84611d46888061478b565b611d579060808101906060016141f1565b876122cf565b611d7383868685611d6e8b8061478b565b612651565b50835b95945050505050565b601a54600090600160a01b900460ff1615611dad57604051633ee5b89360e01b815260040160405180910390fd5b82516000906001600160a01b0316158015611dcb5750602084015115155b15611de95760405163ae715ad360e01b815260040160405180910390fd5b611df685602001516127c5565b60608601519091506001600160a01b0316611e235760405162845fdd60e41b815260040160405180910390fd5b6127108560e001511115611e4a5760405163388d723160e11b815260040160405180910390fd5b6040805180820190915260008082526020820181905290819086516000906001600160a01b031615611ff1576000611e858960000151611330565b90935090506000611e958261232d565b84518c5163ffffffff9081169116149350905082611ebd5780546001600160a01b0316611ec3565b60208401515b95506001600160a01b038616611eec5760405163965a46c160e01b815260040160405180910390fd5b6003810154838015611efe5750600081115b15611f4f5760008b602001518360040154611f199190614dd8565b905081811115611f3c576040516348ba8bf160e01b815260040160405180910390fd5b6000848152600760205260409020600401555b50835163ffffffff1660408c01526020808501516101808d01528a015115611fee57611f838a600001518b6020015161217e565b611f9c828b60000151888d602001518f60e001516127fe565b6101208c01528951611fe7906001600160a01b03888116911614611fce576001820154600160a01b900460ff16611fdb565b8154600160a01b900460ff165b60128c60200151612881565b6101408c01525b50505b6003805490600061200183614deb565b909155506101608a015261201489611300565b60208801519093501561203457612034838860000151896020015161120b565b61204c838a8a600001518b6020015189878a886128ec565b509093505050505b9392505050565b804710156120b05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146120fd576040519150601f19603f3d011682016040523d82523d6000602084013e612102565b606091505b50509050806121795760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016120a7565b505050565b8060000361218a575050565b6001600160a01b0382166121b157604051632a38b13360e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156121fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221e9190614e04565b90506122356001600160a01b038316333086612ad3565b6040516370a0823160e01b8152306004820152839082906001600160a01b038516906370a0823190602401602060405180830381865afa15801561227d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a19190614e04565b6122ab9190614d87565b146122c957604051630e40773560e21b815260040160405180910390fd5b50505050565b806000036122dc57505050565b6001600160a01b03831661230357604051633a48ca7b60e11b815260040160405180910390fd5b612179838383612b3e565b604080518082019091526000808252602082015261040c826000612b6e565b6000818152600760205260408120600180820154839291600160a01b90910460ff1610156120545760405163618cca3f60e11b815260040160405180910390fd5b60006123b861237c85612c66565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ca192505050565b949350505050565b6000806123cb6112d2565b6001600160a01b031614806123e2575060125460ff165b905090565b60006123b88484846000612cc5565b6000816124038486614e1d565b6123b89190614db0565b600080600061241b86612d00565b601b546040516369a933a560e01b81526001600160a01b03808416600483015260248201899052306044830152600060648301529293509116906369a933a590608401600060405180830381600087803b15801561247857600080fd5b505af115801561248c573d6000803e3d6000fd5b5050601b54604051631a4ca37b60e21b81526001600160a01b038581166004830152602482018a90523060448301526000945090911691506369328dec906064016020604051808303816000875af11580156124ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125109190614e04565b9050858110156125335760405163407559a360e11b815260040160405180910390fd5b6000888152601d60205260409020869055601c5461271090612556908890614e1d565b6125609190614db0565b6000898152601e60209081526040918290209290925580516001600160a01b038581168252928101899052918716918a917f2d3ba0fa5be2ef8cb1ec8920a07a6cbccc2397b18ca3e70f48ea695500b8f218910160405180910390a35084925090505b94509492505050565b60008060006125da8861232d565b60018101549091506001600160a01b0390811690881681036126025786935091506126479050565b866000036126165786935091506126479050565b6126408989838a61263b60128860010160149054906101000a900460ff168c8e612d39565b612d85565b9350935050505b9550959350505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061267f60c0830183614cf8565b60405161268d929190614e34565b604051809103902003156127be576000806127546126b160808501606086016141f1565b6127105a6126bf9190614d87565b600061010063fd614f4160e01b8c8c8c8c6126db5760006126ed565b6126ed6101208d016101008e016141f1565b6126fa60208e018e6141b4565b61270760c08f018f614cf8565b60405160240161271d9796959493929190614e44565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612ec4565b9150915083158015612764575081155b15612781576040516264cdd360e41b815260040160405180910390fd5b867fb1a4ab59facaedd6d3a71da3902e0a1fa5b99750c0e20cd878334378a41cb33583836040516127b3929190614e97565b60405180910390a250505b5050505050565b63ffffffff81166000908152600f6020526040902054806127f957604051630c3bcd4960e41b815260040160405180910390fd5b919050565b60008260000361281057506000611d76565b846001600160a01b0316846001600160a01b031603612830575081611d76565b600061283b8761232d565b905060006128748888888861263b8760010160149054906101000a900460ff168860000160149054906101000a900460ff168c8c612d39565b5098975050505050505050565b60008260ff168460ff1603612897575080612054565b60008360ff168560ff1610156128cd576128b18585614eb2565b6128bc90600a614faf565b6128c69084614e1d565b90506123b8565b6128d78486614eb2565b6128e290600a614faf565b611d769084614db0565b610120870151801561295e578161295e57604051632770a7eb60e21b8152306004820152602481018290526001600160a01b03841690639dc29fac90604401600060405180830381600087803b15801561294557600080fd5b505af1158015612959573d6000803e3d6000fd5b505050505b6000846000015185602001516003848d604051602001612982959493929190614fbe565b60408051601f1981840301815282825260208054639fa92f9d60e01b8552925191945060009384936001600160a01b031692639fa92f9d926004808401939192918290030181865afa1580156129dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a009190614ffd565b6001600160a01b031663fa31de018c602001518a866040518463ffffffff1660e01b8152600401612a339392919061501a565b6000604051808303816000875af1158015612a52573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a7a919081019061503f565b91509150818b61016001518d7fed8e6ba697dd65259e5ce532ac08ff06d1a3607bcec58f8f0937fe36a5666c548e8e8e8c88604051612abd9594939291906150c1565b60405180910390a4505050505050505050505050565b6040516001600160a01b03808516602483015283166044820152606481018290526122c99085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f4e565b6040516001600160a01b03831660248201526044810182905261217990849063a9059cbb60e01b90606401612b07565b604080518082019091526000808252602082015260408051808201909152600080825260208201526001600160a01b038416612bab57905061040c565b506001600160a01b03831660009081526005830160209081526040918290208251808401909352805463ffffffff168084526001909101549183019190915215612bf657905061040c565b612c008484613020565b15612c2657600483015463ffffffff1681526001600160a01b0384166020820152612054565b506001600160a01b03831660009081526006830160209081526040918290208251808401909352805463ffffffff16835260010154908201529392505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01611313565b6000806000612cb0858561305f565b91509150612cbd816130a4565b509392505050565b600481015460009063ffffffff90811690841603612ce45750826123b8565b612ced8561232d565b546001600160a01b031695945050505050565b600080612d0c8361232d565b600101546001600160a01b031690508061040c57604051630558a50760e31b815260040160405180910390fd5b600082600003612d4b575060006123b8565b6000612710612d5a8482614d87565b612d649086614e1d565b612d6e9190614db0565b9050612d7b868683612881565b9695505050505050565b600085815260186020526040812081908190612da0816131f1565b15612dd257612dc6612db28a8a61320e565b612dbc8b8a61320e565b839190898961328e565b87935093505050612647565b6000612ddd8a61232d565b600201546001600160a01b0390811691508990612dfe908216836000613597565b612e126001600160a01b038216838a6136ac565b6001600160a01b03821663d460f0a2898c8c8b612e31610e1042614dd8565b6040516001600160e01b031960e088901b16815260048101959095526001600160a01b0393841660248601529290911660448401526064830152608482015260a4016020604051808303816000875af1158015612e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb69190614e04565b899550955050505050612647565b6000606060008060008661ffff166001600160401b03811115612ee957612ee9614591565b6040519080825280601f01601f191660200182016040528015612f13576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115612f34578692505b828152826000602083013e90999098509650505050505050565b6000612fa3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661375e9092919063ffffffff16565b8051909150156121795780806020019051810190612fc19190615110565b6121795760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016120a7565b6001600160a01b038216600090815260068201602052604081205463ffffffff161561304e5750600061040c565b50506001600160a01b03163b151590565b60008082516041036130955760208301516040840151606085015160001a6130898782858561376d565b9450945050505061309d565b506000905060025b9250929050565b60008160048111156130b8576130b86144f9565b036130c05750565b60018160048111156130d4576130d46144f9565b036131215760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016120a7565b6002816004811115613135576131356144f9565b036131825760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016120a7565b6003816004811115613196576131966144f9565b036131ee5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016120a7565b50565b600c81015460009060ff1615801561040c57505060080154151590565b60008281526019602090815260408083206001600160a01b0385168085529083528184205486855260189093529083206008018054849360ff169291908390811061325b5761325b614d3e565b6000918252602090912001546001600160a01b0316146123b85760405163054e442960e41b815260040160405180910390fd5b600c85015460009060ff16156132d65760405162461bcd60e51b815260206004820152600d60248201526c191a5cd8589b1959081c1bdbdb609a1b60448201526064016120a7565b85600a018560ff16815481106132ee576132ee614d3e565b90600052602060002001548311156133415760405162461bcd60e51b81526020600482015260166024820152756d6f7265207468616e20706f6f6c2062616c616e636560501b60448201526064016120a7565b600080600088600a0180548060200260200160405190810160405280929190818152602001828054801561339457602002820191906000526020600020905b815481526020019060010190808311613380575b505050505090506133a8898989898561382e565b9093509150848310156133ea5760405162461bcd60e51b815260206004820152600a6024820152696479203c206d696e447960b01b60448201526064016120a7565b6000896009018860ff168154811061340457613404614d3e565b90600052602060002001546402540be4008b60060154856134259190614e1d565b61342f9190614db0565b6134399190614db0565b905086828a60ff168151811061345157613451614d3e565b60200260200101516134639190614dd8565b8a600a018a60ff168154811061347b5761347b614d3e565b90600052602060002001819055508084838a60ff16815181106134a0576134a0614d3e565b60200260200101516134b29190614d87565b6134bc9190614d87565b8a600a018960ff16815481106134d4576134d4614d3e565b600091825260209091200155801561353957808a600b018960ff16815481106134ff576134ff614d3e565b90600052602060002001546135149190614dd8565b8a600b018960ff168154811061352c5761352c614d3e565b6000918252602090912001555b8954604080518981526020810187905260ff8c8116828401528b16606082015290513392917f28d4cf2d5709da3b474b5f05cfd7083faffd601f9500d1f8439b8a13ec7df320919081900360800190a3509198975050505050505050565b8015806136115750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f9190614e04565b155b61367c5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084016120a7565b6040516001600160a01b03831660248201526044810182905261217990849063095ea7b360e01b90606401612b07565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156136fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137219190614e04565b61372b9190614dd8565b6040516001600160a01b0385166024820152604481018290529091506122c990859063095ea7b360e01b90606401612b07565b60606123b884846000856139f4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156137a457506000905060036125c3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156137f8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613821576000600192509250506125c3565b9660009650945050505050565b60008060008760090180548060200260200160405190810160405280929190818152602001828054801561388157602002820191906000526020600020905b81548152602001906001019080831161386d575b5050505050905060006138948583613acf565b905080518860ff161080156138ac575080518760ff16105b6138ed5760405162461bcd60e51b8152602060048201526012602482015271696e646578206f7574206f662072616e676560701b60448201526064016120a7565b6000818960ff168151811061390457613904614d3e565b6020026020010151838a60ff168151811061392157613921614d3e565b6020026020010151886139349190614e1d565b61393e9190614dd8565b9050600061395761394e8c613bd9565b8b8b8587613be4565b9050600181848b60ff168151811061397157613971614d3e565b60200260200101516139839190614d87565b61398d9190614d87565b95506402540be4008b60050154876139a59190614e1d565b6139af9190614db0565b9450838960ff16815181106139c6576139c6614d3e565b602002602001015185876139da9190614d87565b6139e49190614db0565b9550505050509550959350505050565b606082471015613a555760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016120a7565b600080866001600160a01b03168587604051613a71919061512d565b60006040518083038185875af1925050503d8060008114613aae576040519150601f19603f3d011682016040523d82523d6000602084013e613ab3565b606091505b5091509150613ac487838387613e4b565b979650505050505050565b81518151606091908114613b1c5760405162461bcd60e51b81526020600482015260146024820152736d69736d61746368206d756c7469706c6965727360601b60448201526064016120a7565b6000816001600160401b03811115613b3657613b36614591565b604051908082528060200260200182016040528015613b5f578160200160208202803683370190505b50905060005b82811015613bd057848181518110613b7f57613b7f614d3e565b6020026020010151868281518110613b9957613b99614d3e565b6020026020010151613bab9190614e1d565b828281518110613bbd57613bbd614d3e565b6020908102919091010152600101613b65565b50949350505050565b600061040c82613ec4565b805160009060ff80861690871603613c3e5760405162461bcd60e51b815260206004820152601760248201527f636f6d7061726520746f6b656e20746f20697473656c6600000000000000000060448201526064016120a7565b808660ff16108015613c525750808560ff16105b613c905760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881b9bdd08199bdd5b99608a1b60448201526064016120a7565b6000613c9c8489613f0d565b905080600080613cac8b86614e1d565b90506000805b86811015613d33578b60ff168103613ccc57899150613cff565b8a60ff168114613cf757888181518110613ce857613ce8614d3e565b60200260200101519150613cff565b600101613cb2565b613d098285614dd8565b9350613d158783614e1d565b613d1f8787614e1d565b613d299190614db0565b9450600101613cb2565b50613d3e8683614e1d565b6064613d4a8787614e1d565b613d549190614e1d565b613d5e9190614db0565b9350600082613d6e606488614e1d565b613d789190614db0565b613d829085614dd8565b9050600086815b610100811015613e02578192508884836002613da59190614e1d565b613daf9190614dd8565b613db99190614d87565b88613dc48480614e1d565b613dce9190614dd8565b613dd89190614db0565b9150613de482846140ba565b15613dfa57509850611d76975050505050505050565b600101613d89565b5060405162461bcd60e51b815260206004820152601e60248201527f417070726f78696d6174696f6e20646964206e6f7420636f6e7665726765000060448201526064016120a7565b60608315613eba578251600003613eb3576001600160a01b0385163b613eb35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016120a7565b50816123b8565b6123b883836140d0565b600481015460028201546001830154909190808314801590613ee557508142105b15613f06576000846003015490508083038142038502428503840201049350505b5050919050565b815160009081805b82811015613f4c57858181518110613f2f57613f2f614d3e565b602002602001015182613f429190614dd8565b9150600101613f15565b5080600003613f605760009250505061040c565b60008181613f6e8588614e1d565b905060005b61010081101561407b578260005b87811015613fcc57878b8281518110613f9c57613f9c614d3e565b6020026020010151613fae9190614e1d565b613fb88684614e1d565b613fc29190614db0565b9150600101613f81565b5083945080876001613fde9190614dd8565b613fe89190614e1d565b606485613ff58287614d87565b613fff9190614e1d565b6140099190614db0565b6140139190614dd8565b8461401e8984614e1d565b606461402a8a88614e1d565b6140349190614db0565b61403e9190614dd8565b6140489190614e1d565b6140529190614db0565b935061405e84866140ba565b15614072578397505050505050505061040c565b50600101613f73565b5060405162461bcd60e51b81526020600482015260136024820152724420646f6573206e6f7420636f6e766572676560681b60448201526064016120a7565b600060026140c884846140fa565b109392505050565b8151156140e05781518083602001fd5b8060405162461bcd60e51b81526004016120a7919061513f565b6000818311156141155761410e8284614d87565b905061040c565b6120548383614d87565b828054828255906000526020600020908101928215614172579160200282015b828111156141725781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061413f565b5061417e929150614182565b5090565b5b8082111561417e5760008155600101614183565b63ffffffff811681146131ee57600080fd5b80356127f981614197565b6000602082840312156141c657600080fd5b813561205481614197565b6001600160a01b03811681146131ee57600080fd5b80356127f9816141d1565b60006020828403121561420357600080fd5b8135612054816141d1565b60006020828403121561422057600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156142685783516001600160a01b031683529284019291840191600101614243565b50909695505050505050565b60006101a0828403121561428757600080fd5b50919050565b600080604083850312156142a057600080fd5b82356001600160401b038111156142b657600080fd5b6142c285828601614274565b95602094909401359450505050565b6000806000606084860312156142e657600080fd5b8335925060208401356142f8816141d1565b929592945050506040919091013590565b60006020828403121561431b57600080fd5b81356001600160401b0381111561433157600080fd5b820160a0818503121561205457600080fd5b60008083601f84011261435557600080fd5b5081356001600160401b0381111561436c57600080fd5b60208301915083602082850101111561309d57600080fd5b60008060008060008060008060006101008a8c0312156143a357600080fd5b89356143ae81614197565b985060208a01356143be816141d1565b975060408a01356143ce816141d1565b965060608a01356143de816141d1565b955060808a0135945060a08a0135935060c08a01356001600160401b0381111561440757600080fd5b6144138c828d01614343565b9a9d999c50979a9699959894979660e00135949350505050565b60008060008060008060008060e0898b03121561444957600080fd5b883561445481614197565b97506020890135614464816141d1565b96506040890135614474816141d1565b95506060890135614484816141d1565b94506080890135935060a0890135925060c08901356001600160401b038111156144ad57600080fd5b6144b98b828c01614343565b999c989b5096995094979396929594505050565b600080604083850312156144e057600080fd5b82356144eb81614197565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b600481106131ee57634e487b7160e01b600052602160045260246000fd5b6020810161453a8361450f565b91905290565b60006020828403121561455257600080fd5b81356001600160401b0381111561456857600080fd5b6123b884828501614274565b60006020828403121561458657600080fd5b815161205481614197565b634e487b7160e01b600052604160045260246000fd5b6040516101a081016001600160401b03811182821017156145ca576145ca614591565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145f8576145f8614591565b604052919050565b80151581146131ee57600080fd5b80356127f981614600565b60006001600160401b0382111561463257614632614591565b50601f01601f191660200190565b600082601f83011261465157600080fd5b813561466461465f82614619565b6145d0565b81815284602083860101111561467957600080fd5b816020850160208301376000918101602001919091529392505050565b60006101a082360312156146a957600080fd5b6146b16145a7565b6146ba836141a9565b81526146c8602084016141a9565b60208201526146d9604084016141a9565b60408201526146ea606084016141e6565b60608201526146fb608084016141e6565b608082015261470c60a0840161460e565b60a082015260c08301356001600160401b0381111561472a57600080fd5b61473636828601614640565b60c08301525060e083013560e08201526101006147548185016141e6565b9082015261012083810135908201526101408084013590820152610160808401359082015261018092830135928101929092525090565b6000823561019e198336030181126147a257600080fd5b9190910192915050565b6000808335601e198436030181126147c357600080fd5b83016020810192503590506001600160401b038111156147e257600080fd5b80360382131561309d57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261483157600080fd5b83016020810192503590506001600160401b0381111561485057600080fd5b8060051b360382131561309d57600080fd5b8183526000602080850194508260005b858110156148a0578135614885816141d1565b6001600160a01b031687529582019590820190600101614872565b509495945050505050565b81835260006020808501808196508560051b810191508460005b878110156148fb5782840389526148dc82886147ac565b6148e78682846147f1565b9a87019a95505050908401906001016148c5565b5091979650505050505050565b608081526000610120863561019e1988360301811261492657600080fd5b60a06080850152870161494882850161493e836141a9565b63ffffffff169052565b614954602082016141a9565b6101406149688187018363ffffffff169052565b614974604084016141a9565b915061016061498a8188018463ffffffff169052565b614996606085016141e6565b92506101806149af818901856001600160a01b03169052565b6149bb608086016141e6565b93506101a06149d4818a01866001600160a01b03169052565b6149e060a0870161460e565b8015156101c08b015294506149f860c08701876147ac565b9550816101e08b0152614a106102c08b0187836147f1565b9550505060e0850135610200890152610100614a2d8187016141e6565b6001600160a01b03166102208a0152858701356102408a0152838601356102608a0152828601356102808a0152818601356102a08a0152614a7160208e018e61481a565b97509550607f199350838986030160a08a0152614a8f858888614862565b9650614a9e60408e018e61481a565b96509450838988030160c08a0152614ab78787876148ab565b9650614ac560608e016141e6565b6001600160a01b03811660e08b01529550614ae360808e018e6147ac565b965094508389880301818a015250505050614aff8383836147f1565b9350505050614b1960208301866001600160a01b03169052565b836040830152611d7660608301846001600160a01b03169052565b60005b83811015614b4f578181015183820152602001614b37565b50506000910152565b60008151808452614b70816020860160208601614b34565b601f01601f19169290920160200192915050565b805163ffffffff16825260006101a06020830151614baa602086018263ffffffff169052565b506040830151614bc2604086018263ffffffff169052565b506060830151614bdd60608601826001600160a01b03169052565b506080830151614bf860808601826001600160a01b03169052565b5060a0830151614c0c60a086018215159052565b5060c08301518160c0860152614c2482860182614b58565b91505060e083015160e085015261010080840151614c4c828701826001600160a01b03169052565b50506101208381015190850152610140808401519085015261016080840151908501526101809283015192909301919091525090565b6020815260006120546020830184614b84565b6000808335601e19843603018112614cac57600080fd5b8301803591506001600160401b03821115614cc657600080fd5b6020019150600581901b360382131561309d57600080fd5b838152604060208201526000611d76604083018486614862565b6000808335601e19843603018112614d0f57600080fd5b8301803591506001600160401b03821115614d2957600080fd5b60200191503681900382131561309d57600080fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215614d6657600080fd5b813561205481614600565b634e487b7160e01b600052601160045260246000fd5b8181038181111561040c5761040c614d71565b634e487b7160e01b600052601260045260246000fd5b600082614dbf57614dbf614d9a565b500490565b600082614dd357614dd3614d9a565b500690565b8082018082111561040c5761040c614d71565b600060018201614dfd57614dfd614d71565b5060010190565b600060208284031215614e1657600080fd5b5051919050565b808202811582820484141761040c5761040c614d71565b8183823760009101908152919050565b878152602081018790526001600160a01b0386811660408301528516606082015263ffffffff8416608082015260c060a08201819052600090614e8a90830184866147f1565b9998505050505050505050565b82151581526040602082015260006123b86040830184614b58565b60ff828116828216039081111561040c5761040c614d71565b600181815b80851115614f06578160001904821115614eec57614eec614d71565b80851615614ef957918102915b93841c9390800290614ed0565b509250929050565b600082614f1d5750600161040c565b81614f2a5750600061040c565b8160018114614f405760028114614f4a57614f66565b600191505061040c565b60ff841115614f5b57614f5b614d71565b50506001821b61040c565b5060208310610133831016604e8410600b8410161715614f89575081810a61040c565b614f938383614ecb565b8060001904821115614fa757614fa7614d71565b029392505050565b600061205460ff841683614f0e565b63ffffffff60e01b8660e01b168152846004820152614fdc8461450f565b60f89390931b60248401526025830191909152604582015260650192915050565b60006020828403121561500f57600080fd5b8151612054816141d1565b63ffffffff84168152826020820152606060408201526000611d766060830184614b58565b6000806040838503121561505257600080fd5b8251915060208301516001600160401b0381111561506f57600080fd5b8301601f8101851361508057600080fd5b805161508e61465f82614619565b8181528660208385010111156150a357600080fd5b6150b4826020830160208601614b34565b8093505050509250929050565b60a0815260006150d460a0830188614b84565b6001600160a01b038781166020850152604084018790528516606084015282810360808401526151048185614b58565b98975050505050505050565b60006020828403121561512257600080fd5b815161205481614600565b600082516147a2818460208701614b34565b6020815260006120546020830184614b5856fea2646970667358221220b3745c181bcabe79dbd6b8fa569e80b409db4fded39d27aeea132babd9352f6264736f6c63430008110033"; type BridgeFacetConstructorParams = | [signer?: Signer] diff --git a/packages/deployments/contracts/src/utils.ts b/packages/deployments/contracts/src/utils.ts index 4c596fa930..36cc331b88 100644 --- a/packages/deployments/contracts/src/utils.ts +++ b/packages/deployments/contracts/src/utils.ts @@ -66,8 +66,11 @@ export const ProtocolNetworks: Record = { "5000": ProtocolNetwork.MAINNET, "34443": ProtocolNetwork.MAINNET, "534352": ProtocolNetwork.MAINNET, + "252": ProtocolNetwork.MAINNET, }; +const OP_BEDROCK = ["Base", "Mode", "Fraxtal"]; + export const isDevnetName = (_name: string): boolean => { return _name.includes("devnet"); }; @@ -128,7 +131,7 @@ export const getDeploymentName = (_contractName: string, _env?: string, _network contractName = contractName.replace(/AdminMainnet/g, networkName!); } else if (/^(?=.*Admin)(?=.*Connector)/.test(contractName)) { contractName = contractName.replace(/Admin/g, networkName!); - } else if (/^(?=.*Optimism)(?=.*Connector)/.test(contractName) && ["Base", "Mode"].includes(_networkName!)) { + } else if (/^(?=.*Optimism)(?=.*Connector)/.test(contractName) && OP_BEDROCK.includes(_networkName!)) { contractName = contractName.replace(/Optimism/g, networkName!); } else if (/^(?=.*OptimismV0)(?=.*Connector)/.test(contractName) && ["Metis", "Mantle"].includes(_networkName!)) { contractName = contractName.replace(/OptimismV0/g, networkName!); diff --git a/packages/utils/src/helpers/domain.ts b/packages/utils/src/helpers/domain.ts index e7e6bec46f..9473fc4bb3 100644 --- a/packages/utils/src/helpers/domain.ts +++ b/packages/utils/src/helpers/domain.ts @@ -30,6 +30,7 @@ const mainnetChainIdToDomainMapping: Map = new Map([ [5000, 0x6d616e74], // Mantle (mantle interpreted as int) 1835101812 [34443, 0x6d6f6465], // Mode (mode interpreted as int) 1836016741 [534352, 0x7363726f], // Scroll (scroll interpreted as int) 1935897199 + [252, 0x66726178], // Fraxtal (fraxtal interpreted as int) 1718772088 ]); const testnetChainIdToDomainMapping: Map = new Map([ @@ -67,7 +68,6 @@ const specialChainIdToDomainMapping: Map = new Map([ // special pseudo-canonical domain for xERC20s [11111, 11111], ]); - // Hex domains calculated using `getHexDomainFromString` // alternative: ethers.BigNumber.from(ethers.utils.toUtf8Bytes("some string")).toNumber() export const chainIdToDomainMapping: Map = new Map([